Microsoft MVPs inside





 MCSEboard.de – IT Pro Forum zu Windows Server 2008 R2 / 2008 / 2003 & Windows 7 / Vista / XP
Registrieren Hilfe Regeln Benutzerliste Suchen Heutige Beiträge Alle Foren als gelesen markieren

MS SQL Server Forum


Alles zum Thema Microsoft SQL Server — Q & A zu Microsoft SQL Server 2000 / 2005 / 2008 Architektur, Konfiguration, Troubleshooting


Antwort
     
Themen-Optionen
Alt 20.01.2012, 15:20   #1
Newbie
 
Offline
Registriert seit: 01-2012
Beiträge: 4
Insert in eine Tabelle die gerade gelockt ist (T-SQL, SQL Server 2008)

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
    Mit Zitat antworten
Alt 20.01.2012, 15:55   #2
Expert Member
 
Benutzerbild von NilsK
 
Offline
Registriert seit: 06-2008
Ort: Hannover
Beiträge: 7.376
Moin,

normalerweise sollte die Transaktion ohnehin so lange warten, bis die Tabelle frei ist. Ist das bei dir nicht der Fall?

Gruß, Nils

Signatur
Nils Kaczenski

MVP Directory Services: Architecture
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!

    Mit Zitat antworten
Alt 22.01.2012, 15:57   #3
Newbie
 
Offline
Registriert seit: 01-2012
Beiträge: 4
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
    Mit Zitat antworten
Alt 22.01.2012, 16:01   #4
Expert Member
 
Offline
Registriert seit: 07-2005
Beiträge: 11.339
Womit willst Du denn programmieren ? Sowas wird doch im Datenbanktreiber geregelt.

Signatur
Wen du nicht mit Können beeindrucken kannst, den verwirre mit Schwachsinn!

    Mit Zitat antworten
Alt 22.01.2012, 18:33   #5
Newbie
 
Offline
Registriert seit: 01-2012
Beiträge: 4
Mit dem sql server management studio..
    Mit Zitat antworten
Alt 22.01.2012, 22:08   #6
Expert Member
 
Offline
Registriert seit: 07-2005
Beiträge: 11.339
Schaue mal hier:

Stored Procedure How-to Topics

Signatur
Wen du nicht mit Können beeindrucken kannst, den verwirre mit Schwachsinn!

    Mit Zitat antworten
Alt 23.01.2012, 08:45   #7
Expert Member
 
Benutzerbild von NilsK
 
Offline
Registriert seit: 06-2008
Ort: Hannover
Beiträge: 7.376
Moin,

Zitat von fthomas Beitrag anzeigen
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

Signatur
Nils Kaczenski

MVP Directory Services: Architecture
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!

    Mit Zitat antworten
Alt 23.01.2012, 08:46   #8
Expert Member
 
Benutzerbild von NilsK
 
Offline
Registriert seit: 06-2008
Ort: Hannover
Beiträge: 7.376
Moin,

Zitat von zahni Beitrag anzeigen
Sowas wird doch im Datenbanktreiber geregelt.
nein. Das Grundverhalten kommt vom Server. Alles Spezielle muss man in der Applikation regeln. Der Treiber stellt i.W. nur die Verbindung her.

Gruß, Nils

Signatur
Nils Kaczenski

MVP Directory Services: Architecture
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!

    Mit Zitat antworten
Antwort


Themen-Optionen


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Batch gesucht: MSSQL 2008R2 Export in eine normale Datei mit create/insert statements JoNo Windows Forum — Scripting 10 05.02.2011 18:45
SQL - Daten aus Master Tabelle von 2000 auf 2008 kopieren AlexD1979 MS SQL Server Forum 2 30.09.2010 14:06
SQL INSERT: Datensätze in Tabelle einfügen, wenn diese in anderer nicht vorhanden thumb Windows Forum — Scripting 3 09.10.2008 16:06
insert statement - sql server 2000 soelli_ooe MS SQL Server Forum 0 23.02.2006 10:45
Daten von einer Sicht in eine Tabelle Martin Lembcke Windows Server Forum 6 06.05.2004 07:20


Alle Zeitangaben in MEZ/CET. Es ist jetzt 20:26 Uhr. Seite generiert in 0,036 Sekunden.

- Unsere Partner -

Copyright © 2000 – 2012 MCSEboard.de

Sprung zum Seitenanfang