Der Code in etwa so:Nach CTE Auswahl der Reihenfolge Dadurch und dann aktualisieren, werden aktualisieren Ergebnisse die gleiche (TSQL) nicht bestellt
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
Hinweis: die tatsächlichen Daten gleichen DUE_DATE hat.
Wenn ich die SELECT-Anweisung nur innerhalb der CTE ausgeführt habe, könnte ich das Ergebnis erhalten, zB: 1, 2, 3, 4. Aber nach der UPDATE-Anweisung sind die aktualisierten Ergebnisse: 4, 1, 2, 3
Warum passiert das (Auftragsänderung)?
Wie behalten oder ordnen Sie die Ergebnisse zurück zu 1,2,3,4 in der gleichen 1 Abfrage?
I Kampf um herauszufinden, was Sie wirklich mit diesem zu erreichen versuchen, aber ich bezweifle, dass die Reihenfolge der Daten ist anders, aber es ist mehr bis zu Ihrem wählen vs Die output-Klausel, weil Ihre Ausgabe nicht geordnet ist. –
Entlang [Microsoft] (https://msdn.microsoft.com/en-us/library/ms177564.aspx) wird die Bestellung nicht mit OUTPUT-Klausel garantiert, so dass Sie dieses OUTPUT durch ein neues SELECT TOP 4 ersetzen müssen id, due_date ... ' – Polux2
@ AllanS.Hansen Entschuldigung, wenn meine Frage nicht klar war. Ich habe versucht, die gleiche Reihenfolge während der Cte Select und nach dem Update zu erreichen. Ich nehme an, dass sich die Bestellung nach dem Update nicht ändert. – kurakura88