SQL Funktion nur einmal gleichzeitig

Squicky

Lt. Commander
Registriert
Sep. 2002
Beiträge
1.433
Hallo

Ich habe beim Microsoft SQL 2008 eine eigene Skalarwertfunktion erstellt.
Ich kann ich verhindern, dass diese Funktion mehrfach gleichzeitig läuft?

Wenn diese Funktion zufällig von zwei Usern/Anfragen "gleichzeitig" gestartet wird, soll der die Funktion von der "zweiten" Anfrage erst starten, wenn die die Funktion von der ersten Anfrage beendet und verlassen wurde.

Bei C#, Java oder C++ wäre Mutex oder synchronized .... die Stichworte für die Lösung.
Wie kann man dies bei Microsoft SQL Funktionen machen?


Danke
 
sp_getapplock und sp_releaseapplock.

google hilft weiter...
 
Danke für den Hinweis.

Leider habe ich damit Probleme.

Hier ein Beispiel, um mein Problem/Vorhaben zu erklären.
Wenn ich folgenden Code in zwei Abfragen mit einem Abstand von ca. 2 Sekunden starte, so enden die zwei Abfragen auch mit einem Abstand von 2 Sekunden.
Jedoch möchte ich, dass die zweite Abfrage 10 Sekunden nach der ersten endet.
Da die zweite Abfrage erst starten "darf", wenn die erste beendet wurde. Da die 3. Zeile von Abfrage 2 erst beendet wird, wenn die 7. Zeile von Abfrage 1 beendet wird.

Code:
BEGIN TRANSACTION;
DECLARE @result int;
EXEC @result = sp_getapplock @Resource = 'test123', @LockMode = 'Exclusive', @LockOwner = 'Transaction', @LockTimeout=11000, @DbPrincipal = 'public';
SELECT @result, GETUTCDATE();
WAITFOR DELAY '00:00:10';
EXEC @result = sp_releaseapplock @Resource = 'test123';
SELECT @result, GETUTCDATE();
COMMIT TRANSACTION;

P.S. Bitte nicht lachen ;)
 
Zuletzt bearbeitet:
Hallo,

Erkläre doch mal, was du überhaupt vorhast.
Tasks in einen FIFO Puffer schreiben?
Rekursion eine Lösung?

Deine Lösung ist etwas... unschön :)

Gruß
 
Zurück
Oben