Ich möchte die Top 100 Datensätze in SQL Server aktualisieren. Ich habe eine Tabelle T1
mit Feldern F1
und F2
. T1
hat 200 Datensätze. Ich möchte das F1
Feld in den Top 100 Datensätzen aktualisieren . Wie kann ich basierend auf TOP 100
in SQL Server aktualisieren ?
sql
sql-server
tsql
sql-update
Rajesh
quelle
quelle
order by
auch benutzt?Ohne eine macht
ORDER BY
die ganze Idee vonTOP
nicht viel Sinn. Sie müssen eine konsistente Definition haben, welche Richtung "oben" und welche "unten" ist, damit das Konzept von oben sinnvoll ist.SQL Server erlaubt dies, garantiert jedoch kein deterministisches Ergebnis .
Die
UPDATE TOP
Syntax in der akzeptierten Antwort unterstützt keineORDER BY
Klausel, aber es ist möglich, hier eine deterministische Semantik zu erhalten, indem ein CTE oder eine abgeleitete Tabelle verwendet wird, um die gewünschte Sortierreihenfolge wie folgt zu definieren.quelle
TOP
Gewinnchancen verwenden, Sie es verwenden sollten,ORDER BY
weil das, woran Sie interessiert sind, das "Meiste" oder "Wenigste" von etwas ist. In anderen Fällen sind Sie möglicherweise nur an einem passenden Datensatz interessiert. Wie ich heute! Ich musste Datenprobleme (Zyklen) einzeln beheben. Der gesamte Fixierungsprozess umfasste ein DB-Skript, einige Benutzereingriffe und einige Anwendungsvorgänge. Es war uns egal, welcher Datensatz zuerst bearbeitet wurde. Wir haben uns nur darum gekümmert, dass wir sie einzeln behandeln.WHERE
Klausel gehabt , um zuvor verarbeitete Datensätze auszuschließen. Die Frage als schriftliche und akzeptierte Antwort ist ziemlich bedeutungslos. Übrigens: Für die Verwendung von Tabellen als Warteschlange ist dies ein nützlicher Linkwhere
Klausel, um zu vermeiden, dass dieselben Zeilen immer wieder verarbeitet werden.für diejenigen wie mich, die immer noch mit SQL Server 2000 stecken,
SET ROWCOUNT {number};
kann vor derUPDATE
Abfrage verwendet werdenbegrenzt das Update auf 100 Zeilen
Es ist mindestens seit SQL 2005 veraltet, aber ab SQL 2017 funktioniert es immer noch. https://docs.microsoft.com/en-us/sql/t-sql/statements/set-rowcount-transact-sql?view=sql-server-2017
quelle
quelle
Was noch cooler ist, ist die Tatsache, dass Sie eine Inline-Tabellenwertfunktion verwenden können, um auszuwählen, welche (und wie viele Via
TOP
) Zeilen aktualisiert werden sollen. Das ist:Für die Tabellenwertfunktion haben Sie etwas Interessantes, um die zu aktualisierende Zeile auszuwählen, wie:
... und da liegt (meiner bescheidenen Meinung nach) die wahre Kraft, nur die oben ausgewählten Zeilen deterministisch zu aktualisieren und gleichzeitig die Syntax der
UPDATE
Anweisung zu vereinfachen .quelle
Versuchen:
quelle
Sie können auch mithilfe von Alias aktualisieren und beitreten und beitreten:
quelle