Ich brauche Sperren auf Zeilenebene

Dies ist eine Erweiterung vonIst es möglich, das Sperren auf Zeilenebene in SQL Server zu erzwingen?. Hier ist der Anwendungsfall

Ich habe eine Kontentabelle mit Kontonummern, Kontoständen usw. Diese Tabelle wird von vielen Anwendungen verwendet. Es ist durchaus möglich, dass während ich ein Konto ändere, jemand anderes ein anderes Konto ändere. Das erwartete Verhalten ist also, dass ich mein Konto (ROW) sperren würde und die andere Verwendung seins (eine andere ROW) sperren würde.

SQL Server 2008 R2 eskaliert diese Sperre jedoch auf Seite / Tabelle und der zweite Benutzer erhält eine Zeitüberschreitungsausnahme. Ich habe alle in der genannten Frage genannten Lösungen ausprobiert, aber es funktioniert nichts.

Wie kann ich SQL Server zwingen, nur eine Sperre auf Zeilenebene zu sperren ODER wie kann ich dieses Modell so ändern, dass es mit der Seiten- / Tabellensperre funktioniert?

BEARBEITEN Das Update zielt auf einen einzelnen Datensatz über seine PK ab und ist indiziert, sodass nur EINE REIHE aktualisiert / gesperrt wird und der Vorgang nicht länger als eine Minute dauert

Bearbeiten Jetzt sieht es so aus, als ob etwas Seltsames passiert. Ich verwende eine ORM-Bibliothek für DAL, die mehr als eine Verbindung öffnet, und ich habe die Frage zu ihrer Unterstützung aufgeworfen. Zu Testzwecken habe ich jedoch zwei Sitzungen mit dem Abfragetool geöffnet und Folgendes ausgeführt

Session # 1
begin tran
UPDATE myTable SET COL_1 = COL_1 WHERE COL_1 = 101;

Session # 2
SELECT COL_1 FROM myTable WHERE COL_1 = 101;

Die Abfrage in Sitzung 2 ist abgelaufen !!! Abfragen für andere Werte vonCOL_1 funktionieren gut. Jetzt sieht es so aus, als ob SELECT für eine Sitzung gesperrt ist, wenn sich derselbe Datensatz in einer anderen Sitzung im Bearbeitungsmodus befindet.

Obwohl Oracle die Auswahl einer Zeile (mit Standardparametern / keinen Schlüsselwörtern) unterstützt, während sie von einer anderen Sitzung geändert wird, unterstützt SQL Server diese Auswahl nicht (mit Standardparametern / keinen Schlüsselwörtern). Es scheint also, dass das Problem bei der Bibliothek liegt.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage