Tsql 更新查询将不会运行

Tsql 更新查询将不会运行,tsql,sql-update,Tsql,Sql Update,当我运行下面的查询(第一个代码)时,根据数据库中的当前到达日期,我得到137万个随机离开日期,这是个好消息。然而,当我尝试用第二个代码查询更新数据库时,我收到一条错误消息(见下文),我不知道为什么。你能帮忙吗 Msg 116,级别16,状态1,第5行只能使用一个表达式 当子查询未与一起引入时,在选择列表中指定 存在 第一个代码 SELECT ArrivalDate, DATEADD(day, 1 + RAND(checksum(NEWID())) * LengthOfStay.LengthofS

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

Msg 116,级别16,状态1,第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
第二代码

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

您有几个问题:

  • LengthOfStay,Bookings
    是一个交叉连接(笛卡尔积):这是有意的吗
  • 子查询中有2列,但仅尝试更新一列
假设打算进行交叉连接,则不需要子查询

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

您似乎选择了2列来更新1列(出发日期)

Hi gbn,上面的更新查询是否仍然会随机化我的停留时间?谢谢gbn。非常感谢。再次您好gbn,似乎随机性已经改变,在我选择查询之前,我会得到1到28天之间的离开随机性。下面的查询只使用了1到2天。从LengthofStay L、Bookings B中使用入住更新B设置出发日期=日期添加(天,1+RAND(校验和(NEWID())*1.5*L.LengthofStay,B.ArrivalDate)