Einzelnen Beitrag anzeigen

Bart Simpson

Registriert seit: 3. Dez 2002
9 Beiträge
 
#1

Wie lange gilt ein WITH(UPDLOCK)?

  Alt 12. Feb 2003, 14:34
Ich arbeite an einem größerem Projekt mit dem M$ SQL Server 2000.
Ich habe dafür einige ziemlich komplexe Stored Procedures geschrieben die viele Tabellen meiner DB bearbeiten.
Nun bin ich auf ein Problem gestossen auf dass ich bisher keine Antwort gefunden hab:
Ich füge innerhalb einer Stored Procedure Daten an eine Tabelle mit einem Statement wie diesem an:

INSERT INTO Tabelle 1 (Feld1,Feld2)
SELECT Feld1, Feld2 FROM Tabelle2

Soweit kein Problem, aber eines meiner Felder ist eine (Integer) ID Spalte, deren neuen Wert ich ermitteln muss:

SELECT COALESCE(MAX(ID)+1,1)AS NewID from Tabelle1

Normalerweise hänge ich daran noch ein WITH(UPDLOCK), damit die Tabelle so lange gesperrt ist, bis ich fertig bin.
Wenn ich das Ganze nun in einen INSERT Aufruf packe ensteht in etwa so was:

INSERT INTO Tabelle 1 (Feld1,Feld2)
SELECT
(SELECT COALESCE(MAX(ID)+1,1)AS NewID from Tabelle1 WITH(UPDLOCK)),
Feld2 FROM Tabelle2

Nun meine Frage: Is das WITH(UPDLOCK) überhaupt nötig, oder ist die Tabelle sowieso gesperrt, weil ich grade ein INSERT ausführen welches wiederum meine neue ID ermittelt?

Wenn's nötig ist: Wie lange gilt das dann? Nur für den INSERT Befehl oder etwa für die ganze Stored Procedure? Letzteres wäre ziemlich blöd, denn die läuft noch _wirklich_ lange weiter und würde mir dann recht viel blockieren...

Irgendeine Ahnung? Wenn ja, kann mir jemand irgendwelche Referenzen zeigen, wo sowas nachzulesen steht? Ich würde das Ganz nämlich irgendwann gern mal verkaufen und dann wäre es gut hier mit "offiziellen" Argumenten zu kommen
Bin aber auch schon dankbar wenn mir irgendwer was dazu sagen könnte...

Bart Simpson
Naeser's Gesetz: Man kann etwas narrensicher machen - aber nicht VERDAMMT narrensicher!
  Mit Zitat antworten Zitat