2013-02-20 52 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)