SQL, um zu bestimmen, ob ein einzelnes Datenelement durch einen Schlüssel in einem Update oder Insert ausgeführt wird

Diese Seite wurde aktualisiert :
Erstellungsdatum der Seite :

In einem Prozess wie Aktualisieren, wenn ein Schlüssel vorhanden ist, oder Einfügen, wenn kein Schlüssel vorhanden ist, wird normalerweise eine Auswahl basierend auf dem Schlüssel durchgeführt, und der Prozess wird bestimmt, indem überprüft wird, ob ein Fall vorliegt. SQL Server 2008 fügt außerdem eine "merge"-Anweisung hinzu, mit der Sie ein Update und ein Insert (und dann Delete) mit einer einzelnen Anweisung ausführen können. Dies ist jedoch ein Vergleich von zwei Tabellen und eignet sich nicht für einzelne Daten.

Tatsächlich gibt es eine Möglichkeit, eine Zeile einfach zu aktualisieren, indem Sie Update und Insert bestimmen, ohne die Anzahl der Datensätze mit einer select-Anweisung überprüfen zu müssen.

update [TableName]
set [ColumnName] = @value
--    : 他更新 SQL
where [KeyColumnName] = @value
--    : 他キー比較
if @@ROWCOUNT = 0
insert into [TableName]
(
  [ColumnName]
--  : 他更新 SQL
)
values
(
  @value
--  : 他更新値
)

Das Schlüsselwort hier ist "@@ROWCOUNT". Der @@ROWCOUNT kann die Anzahl der Zeilen abrufen, auf die das vorherige SQL angewendet wurde. Der vorhergehende Code führt zuerst die Update-Anweisung aus, und wenn sie aktualisiert wurde, gibt @@ROWCOUNT 1 oder höher zurück, sodass die nächste Insert-Anweisung nicht ausgeführt wird. Wenn umgekehrt keine Zeile in der Update-Anweisung aktualisiert wird, gibt @@ROWCOUNT 0 zurück, also führen Sie Insert by IF-Anweisung aus.

Da es sich bei dem oben genannten SQL um eine Vorlage handelt, ersetzen Sie die Spaltennamen und Werte, die zum entsprechenden Zeitpunkt aktualisiert werden sollen. @value ist nur ein Variablenname, also ersetzen Sie diesen durch den Wert, den Sie aktualisieren möchten.