的代碼大致是這樣的:做CTE選擇排序,然後更新後,更新的結果是沒有順序相同(TSQL)
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 4.但是在UPDATE語句之後,更新的結果是:4,1,2, 3
這是爲什麼(訂單更改)發生?
如何在同一個查詢中保留或重新排序結果回到1,2,3,4?
我很難找出你實際上正在努力實現這個東西,但我懷疑數據的順序是不同的,但它更下降到您的選擇VS輸出子句,因爲你的輸出沒有排序。 –
沿着[Microsoft](https://msdn.microsoft.com/en-us/library/ms177564.aspx),訂單不會與OUTPUT子句一起保證,因此您必須將此OUTPUT替換爲新的'SELECT TOP 4 id,due_date ...' – Polux2
@ AllanS.Hansen對不起,如果我的問題不清楚。我正在嘗試在cte select和更新後達到相同的順序。我認爲更新後訂單不會改變。 – kurakura88