Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Odpowiednik funkcji Sleep() w SQL Server:instrukcja WAITFOR

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyświetl listę wszystkich kolumn dopuszczających wartość null w bazie danych programu SQL Server

  2. Użyć liczby zmiennoprzecinkowej lub dziesiętnej dla kwoty w dolarach w aplikacji księgowej?

  3. Jak sprawdzić, czy wyliczona kolumna jest „utrwalona” w SQL Server?

  4. Czy ten kod zapobiega wstrzykiwaniu SQL?

  5. Jak mogę przekonwertować Sql Server 2008 DateTimeOffset na DateTime?