【发布时间】:2016-11-03 18:07:32
【问题描述】:
代码大致是这样的:
WITH cte AS
(
SELECT TOP 4 id, due_date, check
FROM table_a a
INNER JOIN table_b b ON a.linkid = b.linkid
WHERE
b.status = 1
AND due_date > GetDate()
ORDER BY due_date, id
)
UPDATE cte
SET check = 1
OUTPUT
INSERTED.id,
INSERTED.due_date
注意:实际数据有相同的due_date。
当我只在 cte 内运行 SELECT 语句时,我可以获得结果,例如:1、2、3、4。 但是UPDATE语句之后,更新的结果是:4,1,2,3
为什么会发生这种(订单更改)?
如何在同一个查询中将结果保留或重新排序为 1、2、3、4?
【问题讨论】:
-
我很难找出你真正想用这个实现的目标,但我怀疑数据的顺序是不同的,但它更多地取决于你的选择与输出子句,因为你的输出没有排序。
-
沿着Microsoft,顺序不保证OUTPUT子句,所以你必须用新的
SELECT TOP 4 id, due_date ...替换这个OUTPUT -
@AllanS.Hansen 抱歉,如果我的问题不清楚。我试图在 cte 选择期间和更新后实现相同的顺序。我假设更新后顺序不会改变。
-
@Polux2 谢谢!我不知道这些信息,我只是假设顺序与 cte 相同。
标签: tsql sql-update common-table-expression sql-order-by