【问题标题】:Update Query will not run更新查询不会运行
【发布时间】:2013-02-20 17:18:09
【问题描述】:

当我运行下面的查询(第一个代码)时,我会根据数据库中的当前到达日期得到 137 万个随机出发日期,这是个好消息。但是,当我尝试使用第二个代码查询更新数据库时,我收到一条错误消息(见下文),我不知道为什么。你能帮我吗?

Msg 116, Level 16, State 1, Line 5 只能使用一个表达式 未引入子查询时在选择列表中指定 存在。

第一个代码

SELECT ArrivalDate, DATEADD(day, 1 + RAND(checksum(NEWID()))
* LengthOfStay.LengthofStay, ArrivalDate) AS DepartureDate    
FROM Bookings, LengthOfStay
ORDER BY ArrivalDate

第二个代码

USE Occupancy
Update Bookings
Set DepartureDate = (SELECT ArrivalDate, DATEADD(day, 1 + RAND(checksum(NEWID()))*1.5
* LengthOfStay.LengthofStay, ArrivalDate))
FROM LengthOfStay, Bookings

【问题讨论】:

    标签: tsql sql-update


    【解决方案1】:

    你有几个问题:

    • LengthOfStay, Bookings 是 CROSS JOIN(笛卡尔积):这是有意的吗
    • 您有来自子查询的 2 列,但只尝试更新其中的一列

    假设您的 CROSS JOIN 是有意的,则您不需要子查询

    UPDATE
       B
    SET
       DepartureDate = DATEADD(day,
                               1 + RAND(checksum(NEWID()))*1.5 * L.LengthofStay,
                              B.ArrivalDate)
    FROM
       LengthOfStay L, Bookings B
    

    【讨论】:

    • 嗨 gbn,上述更新查询是否仍然随机化我的逗留时间?
    • 谢谢gbn。非常感谢。
    • 你好,gbn,似乎随机化已经改变,在我的选择查询之前,我会在 1 到 28 天之间得到出发随机化,下面的查询只使用了 1 到 2 天。 USE Occupancy Update B Set DepartureDate = DATEADD(day, 1 + RAND(checksum(NEWID()))*1.5 * L.LengthofStay, B.ArrivalDate) FROM LengthOfStay L, Bookings B
    【解决方案2】:

    您似乎选择了 2 列来更新 1 列(DepartureDate)

    【讨论】:

      猜你喜欢
      • 2017-01-07
      • 1970-01-01
      • 2015-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-28
      • 2016-04-25
      • 2020-04-04
      相关资源
      最近更新 更多