Sie sind sich nicht sicher, warum Sie Finanztransaktionen nicht in Datenbanktransaktionen verpacken (z. B. wenn Sie Geld von einem Konto auf ein anderes überweisen - Sie legen nicht jeweils eine Seite der Transaktion fest - aus diesem Grund existieren explizite Transaktionen). Selbst wenn Ihr Code auf Geschäftstransaktionen ausgerichtet ist, wie es sich anhört, können alle Transaktionsdatenbanken bei Fehlern oder Ausfällen implizite Rollbacks durchführen. Ich denke, diese Diskussion geht Ihnen weit über den Kopf.
Wenn Sie Probleme beim Sperren haben, implementieren Sie die Versionierung und bereinigen Sie Ihren Code.
Keine Sperre gibt nicht nur falsche Werte zurück, sondern auch Phantomdatensätze und Duplikate.
Es ist ein weit verbreitetes Missverständnis, dass Abfragen dadurch immer schneller ausgeführt werden. Wenn eine Tabelle keine Schreibsperren enthält, macht dies keinen Unterschied. Wenn die Tabelle gesperrt ist, wird die Abfrage möglicherweise schneller, aber es gibt einen Grund, warum Sperren überhaupt erfunden wurden.
Um fair zu sein, hier sind zwei spezielle Szenarien, in denen ein Nolock-Hinweis nützlich sein kann
1) SQL Server-Datenbank vor 2005, die eine lange Abfrage für eine Live-OLTP-Datenbank ausführen muss, ist möglicherweise der einzige Weg
2) Schlecht geschriebene Anwendungen, die Datensätze sperren und die Kontrolle an die Benutzeroberfläche und die Leser zurückgeben, werden auf unbestimmte Zeit blockiert. Nolock kann hier hilfreich sein, wenn die Anwendung nicht repariert werden kann (von Drittanbietern usw.) und die Datenbank entweder vor 2005 ist oder die Versionierung nicht aktiviert werden kann.