Moin,
Zitat von fthomas
Muss ich, um das von dir Beschriebene Verhalten zu erzeugen, das Insert-Statement extra in einen "begin transaction" ... "commit transaction"-Block packen? Weil du von Transaktion gesprochen hast..
|
nein, das Verhalten ist Standard. Wenn du nichts anderes anforderst, isoliert SQL Server Transaktionen automatisch voneinander - das ist gewissermaßen eine seiner Hauptaufgaben. Sprich: Wenn eine Transaktion eine Ressource (z.B. Tabelle) nutzt, dann sperrt SQL Server die Ressource, bis die Transaktion beendet ist (Commit oder Rollback).
Einzelne Aktionen bilden in sich eine Transaktion (Implicit Transaction). Das Kapseln mit BEGIN..END TRANSACTION brauchst du nur, wenn du mehrere Kommandos zu einer Transaktion zusammenfassen willst. In dem Fall bleiben die Sperren für alle Ressourcen, die in der Transaktion angesprochen werden, so lange erhalten, bis die Transaktion endet.
Sobald eine Ressource gesperrt ist, warten andere Transaktionen, bis die Sperre aufgehoben wird. Ein Limit gibt es da, soweit ich mich erinnere, nicht, daher ist bei komplexen Applikationen einiges an Sorgfalt nötig, um Performanceprobleme durch Sperrkonflikte zu vermeiden.
Gruß, Nils