W SQL Server możesz użyć WAITFOR
oświadczenie o opóźnieniu wykonania partii, procedury składowanej lub transakcji.
Działa podobnie do funkcji sleep()
w MySQL funkcjonować.
Właściwie jest to prawdopodobnie bardziej kombinacja trzech funkcji „sleep” Postgresa:pg_sleep()
, pg_sleep_for()
i pg_sleep_until()
.
Mówię to, ponieważ WAITFOR
SQL Servera Instrukcja daje możliwość określenia albo opóźnienia czasowego, albo rzeczywistego ustalonego czasu przed kontynuowaniem wykonywania.
Przykład – określ opóźnienie
Aby określić opóźnienie, użyj DELAY
argument, po którym następuje rzeczywisty czas oczekiwania/spania.
Opóźnienie może wynosić maksymalnie 24 godziny.
Oto przykład do zademonstrowania.
SELECT CURRENT_TIMESTAMP AS [First Timestamp];
WAITFOR DELAY '00:00:10';
SELECT CURRENT_TIMESTAMP AS [Second Timestamp];
Wynik:
Time: 11.137s (11 seconds) +-------------------------+ | First Timestamp | |-------------------------| | 2020-06-29 00:02:30.963 | +-------------------------+ (1 row affected) Commands completed successfully. +-------------------------+ | Second Timestamp | |-------------------------| | 2020-06-29 00:02:41.610 | +-------------------------+ (1 row affected)
Podczas korzystania z DELAY
wartość jest sformatowana jako gg:mm[[:ss].mss].
Wartość można określić w data-godzinie format danych lub jako zmienna lokalna. Nie można jednak określić dat, więc część daty datetime wartość jest niedozwolona.
Przykład – określ czas
Alternatywnie możesz użyć TIME
argument, aby określić czas uruchomienia partii, procedury składowanej lub transakcji.
W tym przypadku podana wartość to czas, w którym WAITFOR
oświadczenie się kończy.
Oto przykład do zademonstrowania.
SELECT CURRENT_TIMESTAMP AS [First Timestamp];
WAITFOR TIME '04:33:30';
SELECT CURRENT_TIMESTAMP AS [Second Timestamp];
Wynik:
Time: 39.487s (39 seconds) +-------------------------+ | First Timestamp | |-------------------------| | 2020-06-29 04:32:51.183 | +-------------------------+ (1 row affected) Commands completed successfully. +-------------------------+ | Second Timestamp | |-------------------------| | 2020-06-29 04:33:30.160 | +-------------------------+ (1 row affected)
Oto kilka rzeczy, o których należy pamiętać w odniesieniu do podanej wartości czasu:
- Czas można określić w data-godzinie format danych lub może być określona jako zmienna lokalna.
- Nie można określić dat, więc część daty datetime wartość nie jest dozwolona.
- Godzina jest sformatowana jako gg:mm[[:ss].mss] i opcjonalnie może zawierać datę 1900-01-01.
Rzeczywiste opóźnienie może się różnić
Rzeczywiste opóźnienie może różnić się od podanego czasu, ponieważ będzie to zależeć od takich rzeczy, jak obciążenie serwera.
Licznik czasu rozpoczyna się, gdy WAITFOR
wątek instrukcji jest zaplanowany. Jeśli serwer jest zajęty, wątek może nie zostać zaplanowany od razu, więc opóźnienie może być dłuższe niż określony czas.
Wiadomości brokera serwera
WAITFOR
instrukcja akceptuje niektóre argumenty/wartości, które mają zastosowanie tylko do komunikatów Service Broker.
Korzystając z wiadomości Service Broker, możesz podać RECEIVE
oświadczenie lub GET CONVERSATION GROUP
oświadczenie, a także TIMEOUT
argument określający czas w milisekundach oczekiwania na przybycie komunikatu do kolejki.
Więcej informacji na temat tych opcji można znaleźć w oficjalnej dokumentacji firmy Microsoft.