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

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

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

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...