AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Wie lange gilt ein WITH(UPDLOCK)?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie lange gilt ein WITH(UPDLOCK)?

Ein Thema von Bart Simpson · begonnen am 12. Feb 2003 · letzter Beitrag vom 12. Feb 2003
Antwort Antwort
Bart Simpson

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

Wie lange gilt ein WITH(UPDLOCK)?

  Alt 12. Feb 2003, 15: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
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Wie lange gilt ein WITH(UPDLOCK)?

  Alt 12. Feb 2003, 16:07
Hmmm.... die Onlinehilfe sagt:

Zitat:
UPDLOCK
Verwendet beim Lesen einer Tabelle Aktualisierungssperren anstelle von gemeinsamen Sperren und erhält Sperren bis zum Ende der Anweisung oder der Transaktion aufrecht. UPDLOCK bietet den Vorteil, dass Sie Daten lesen (ohne andere Leser zu blockieren) und später aktualisieren können und dabei die Gewissheit haben, dass die Daten seit Ihrem letzten Lesevorgang nicht geändert wurden.
Wenn ich das so sehe ist deine Anweisung ja nach dem INSERT INTO beendet. ?
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Bart Simpson

Registriert seit: 3. Dez 2002
9 Beiträge
 
#3
  Alt 12. Feb 2003, 16:26
Danke erstmal... das hab ich anscheinend in der Hilfe übersehen
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
Naeser's Gesetz: Man kann etwas narrensicher machen - aber nicht VERDAMMT narrensicher!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz