Fehlerbehebung bei SELECT FOR UPDATE in SQL Server
Dieses Problem ist hauptsächlich auf die Inkompatibilität der SELECT FOR UPDATE-Syntax im Oracle-Stil mit SQL Server zurückzuführen . Während SQL Server das Sperren auf Zeilenebene durch Mechanismen wie Updlock und Rowlock unterstützt, fehlt ihm ein direktes Äquivalent zu SELECT FOR UPDATE.
Die bereitgestellte Lösung versucht, das gewünschte Verhalten durch die Verwendung verschiedener Sperrhinweise (Updlock, Xlock, usw.) in Verbindung mit anderen Einstellungen und Techniken (DBCC TRACEON, READPAST). Wie der Autor jedoch einräumt, emuliert keiner dieser Ansätze das Verhalten von Oracles SELECT FOR UPDATE vollständig.
In SQL Server wird die Zeilensperre im Allgemeinen basierend auf den spezifischen WHERE-Klauselbedingungen angewendet, die in der Abfrage verwendet werden. Dies bedeutet, dass die Sperrung nur für die Zeilen erfolgt, die die in der Abfrage angegebenen Kriterien erfüllen. Daher ist es nicht möglich, zu verhindern, dass andere Verbindungen auf verschiedene Zeilen in derselben Tabelle zugreifen oder diese ändern, selbst wenn Sperrhinweise verwendet werden.
Die ultimative Lösung des Autors bestand darin, Deadlock- und Parallelitätsausnahmen abzufangen, um Probleme im Zusammenhang mit übermäßiger Sperrung zu mildern . Darüber hinaus haben sie eine Snapshot-Isolation implementiert, die dabei hilft, Transaktionen voneinander zu isolieren, aber bestimmte Einschränkungen aufweist und eine Datenbankserverkonfiguration erfordert.
Das obige ist der detaillierte Inhalt vonWie kann ich die SELECT FOR UPDATE-Funktionalität von Oracle in SQL Server replizieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!