![]() |
Wie lange gilt ein WITH(UPDLOCK)?
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 |
Re: Wie lange gilt ein WITH(UPDLOCK)?
Hmmm.... die Onlinehilfe sagt:
Zitat:
|
Danke erstmal... das hab ich anscheinend in der Hilfe übersehen :oops:
Aber egal: Darauf kann ich auch nur mit einem klaren "Jein" antworten... Die große Stored Procedure, die das INSERT ausführt ist extrem lang und manipuliert quer über 10-15 Tabellen hinweg. Deshalb ist das Ganze natürlich an sich schon mal in einer Transaktion verpackt. Heisst das jetzt dass die Tabelle während der ganzen Stored Procedure locked bleibt? Bart Simpson |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz