Unter der Annahme, dass Sie eine einzelne Zeile einfügen/aktualisieren möchten, ist der optimale Ansatz die Verwendung der SQL Server-Funktion REPEATABLE READ
Isolationsebene der Transaktion:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN TRANSACTION
IF (EXISTS (SELECT * FROM myTable WHERE key=@key)
UPDATE myTable SET ...
WHERE key=@key
ELSE
INSERT INTO myTable (key, ...)
VALUES (@key, ...)
COMMIT TRANSACTION
Diese Isolationsstufe wird nachfolgende wiederholte Lesetransaktionen verhindern/sperren vom Zugriff auf die gleiche Zeile ( WHERE key=@key
), während die laufende Transaktion geöffnet ist. Andererseits, Operationen in einer anderen Zeile werden nicht blockiert ( WHERE key=@key2
).
2 Stimmen
Ähnliche Fragen: * Stored Proc einfügen aktualisieren auf SQL Server * SQL Server 2005-Implementierung von MySQL REPLACE INTO?
53 Stimmen
Für alle, die diese Frage zum ersten Mal stellen - bitte lesen Sie unbedingt alle Antworten und Kommentare. Das Alter kann manchmal zu irreführenden Informationen führen...
1 Stimmen
Erwägen Sie die Verwendung des EXCEPT-Operators, der in SQL Server 2005 eingeführt wurde.