2009-07-29 20 views
6

Mam procedurę składowaną dla programu SQL Server 2000, która może wykonywać tylko jedną instancję w danym momencie. Czy istnieje sposób sprawdzenia i upewnić się, że procedura nie jest obecnie w realizacji?Zapobieganie dwukrotnemu uruchomieniu procedury składowanej w tym samym czasie.

Idealnie chciałbym, aby kod był samowystarczalny i wydajny (szybki). Nie chcę też robić czegoś takiego jak tworzenie globalnej tabeli tymczasowej sprawdzającej jej istnienie, ponieważ jeśli procedura z jakiegoś powodu się nie powiedzie, zawsze będzie traktowana jako działająca ...

Szukałem, ja don Myślę, że to pytanie zostało już zadane. Jeśli tak, przepraszam.

+0

Z której wersji serwera sql korzystasz? –

+0

Zaktualizowałem wpis. Przepraszam. –

Odpowiedz

10

tak istnieje sposób. użyj tego, co jest znane jako SQL Server Application locks.

EDYCJA: tak to również działa w SQL Server 2000.

+0

Nie próbowałem tego jeszcze, ale wygląda na to, że potrzebuję odpowiedzi. Dzięki! –

1

Co powiesz na zablokowanie obojętnego stołu? Nie spowoduje to zakleszczeń w przypadku awarii.

+0

Nie widzę, w jaki sposób to pomoże w jakikolwiek sposób. możesz rozwinąć więcej? –

0

Na początku procedury sprawdzania, czy element danych jest „zablokowany”, jeśli nie zablokować go

Pod koniec procedury odblokowania kawałek danych.

tj

SELECT @IsLocked=IsLocked FROM CheckLockedTable Where spName = 'this_storedProcedure' 

IF @IsLocked = 1 
    RETURN 
ELSE 
    UPDATE CheckLockedTable SET IsLocked = 1 Where spName = 'this_storedProcedure' 

. 
. 
. 

-- At end of Stored Procedure 
    UPDATE CheckLockedTable SET IsLocked = 0 Where spName = 'this_storedProcedure' 
+0

Jak to zrobić? –

+0

Dobre rozwiązanie, ale nie jest ono samo w sobie ... –

Powiązane problemy