Gibt es eine Möglichkeit, eine Zeile in der SQL 2005-2008-Datenbank zu sperren, ohne eine Transaktion zu starten, sodass andere Prozesse die Zeile nicht aktualisieren können, bis sie entsperrt ist?Sperrzeile in SQL 2005-2008
Antwort
können Sie RowLock or other hints verwenden, aber Sie sollten careful ..
Der HOLDLOCK Hinweis SQL Server sein wird anweisen, um die Sperre zu halten, bis die Transaktion übermittelt. Der ROWLOCK-Hinweis sperrt nur diesen Datensatz und gibt keine Seiten- oder Tabellensperre aus.
Das Schloss wird auch freigegeben, wenn Sie Ihre Verbindung schließen oder es Timeout. Ich würde sehr vorsichtig dabei sein, da es alle SELECT-Anweisungen stoppt, die diese Zeile tot in ihren Spuren schlagen. SQL Server verfügt über zahlreiche Sperrhinweise, die Sie verwenden können. Sie können sie in der Onlinedokumentation anzeigen, wenn Sie nach HOLDLOCK oder ROWLOCK suchen.
Alles, was Sie auf dem Server ausführen, geschieht in einer Transaktion, entweder implizit oder explizit.
Sie können nicht einfach eine Zeile ohne Transaktion sperren (die Zeile nur lesen). Sie können die Datenbank nur lesen, aber nicht nur eine Zeile.
Erklären Sie Ihren Zweck und es könnte eine bessere Lösung sein. Isolationsstufen und Sperrhinweise und row versioning.
Müssen Sie eine Zeile sperren, oder sollte Sql Server's Application locks tun, was Sie brauchen?
Ein Application Locks ist nur ein Schloss mit einem Namen, den Sie "sperren" können, "entsperren" und prüfen, ob es gesperrt ist. Details siehe oben. (Sie werden entsperrt, wenn Ihre Verbindung geschlossen usw., so neigen dazu, sich selbst zu reinigen)
Ich kann keine Anwendungssperren verwenden, weil andere Anwendungen, die auf die 'gesperrte' Zeile zugreifen, nicht wissen, dass sie zuerst die Anwendungssperrung überprüfen müssen. – alex
- 1. rekursive SQL-Mathematik in SQL?
- 2. in SQL
- 3. in SQL
- 4. SQL ISNULL Zustand in Sql Pivot und Sql Fall
- 5. SQL SQL-Spalte in SQL Management Studio einfach bearbeiten
- 6. SQL: Verknüpfte Listen in SQL-Datenbank?
- 7. SQL Server Binärwert in dynamischen SQL-
- 8. Convert SQL in LINQ to SQL
- 9. Verknüpfen von SQL-Ansichten in Oracle sql
- 10. SQL dekodieren base64 in SQL-Entwickler
- 11. Alte SQL History in Oracle SQL Entwickler
- 12. SQL Server - Bindestrich in dynamischen SQL
- 13. SQL Merge Zeilen in SQL-Tabelle
- 14. SQL-Abfrage Datetime in SQL Server einfügen
- 15. SQL Server-Schleife und in SQL einfügen
- 16. Dynamische SQL Join in SQL-Server
- 17. parameter sql query in find von sql
- 18. Dynamische SQL in SQL Server - wie?
- 19. SQL- Kombination von zwei Tabellen in SQL
- 20. SQL-Parameter in NOT LIKE dynamischer SQL
- 21. SQL - Datum in SQL in Integer für Case-Anweisung konvertieren
- 22. CASE-Anweisung in WHERE-Klausel in SQL (SQL Server)
- 23. SQL wo in Listen in Oracle PL/SQL?
- 24. Transaktionssperre in Sql Server
- 25. Serverpfad in SQL-Abfrage
- 26. Datum seriell in SQL?
- 27. SQL - Unterabfrage in Aggregatfunktion
- 28. = * Operator in SQL
- 29. Transaktionsgrößenbeschränkung in SQL Server
- 30. Wo binär in SQL
Ich habe das versucht, aber es ist nicht das, was ich will. Es hält tatsächlich die Sperre, wenn ich ein Update mache. Das Update wartet, bis die Sperre aufgehoben wird, und aktualisiert danach den Datensatz (das ist nicht das, was ich möchte). Zweitens kann ich immer noch eine Auswahl ohne Probleme durchführen. – Martijn