Jump to content

Insert in eine Tabelle die gerade gelockt ist (T-SQL, SQL Server 2008)


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Geschrieben

Hallo zusammen,

 

ich möchte in einer Stored Procedure ein Insert in eine Tabelle machen. Diese Tabelle kann aber auch noch von anderen Stored Procedures bearbeitet werden (dann ist sie zu dem Zeitpunkt ja "gelockt"). Wenn die Tabelle gerade gelockt ist, und eine Stored Procedure trotzdem in die Tabelle einen Insert machen möchte, wie kann ich dann verhindern, dass der Insert fehlschlägt? Am besten wäre, wenn die Stored Procedure so lange warten würde, bis die Tabelle wieder freigegeben/"unlocked" ist.

 

Danke,

 

VG

Geschrieben

Hi,

 

achso, ok. Ich habe noch nicht mit der Programmierung angefangen, bin aber davon ausgegangen, dass der Insert standardmässig in einem solchen Fall fehlschlägt.

 

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..

 

VG

Geschrieben

Moin,

 

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

Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...