0

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

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

第一个代码

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
4

2 回答 2

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
于 2013-02-20T09:15:20.667 回答
0

看来您正在选择 2 列来更新 1 列(DepartureDate)

于 2013-02-20T09:17:49.787 回答