2013-02-20 51 views
0

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

消息116,级别16,状态1,行可以在选择列表中指定 当子查询不与 EXISTS引入5只有一个表达式。

1码

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 

回答

1

你有几个问题:

  • LengthOfStay, Bookings是C ROSS 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 
+0

嗨GBN,请问上面更新查询还是随机化我的逗留时间? – wafw1971 2013-02-20 09:16:33

+0

@ wafw1971:是的,它的确如此 – gbn 2013-02-20 09:18:02

+0

谢谢gbn。非常感谢。 – wafw1971 2013-02-20 09:19:11

0

看来你是选择2列,以更新1列(DepartureDate)