sql >> Databáze >  >> RDS >> Sqlserver

Ekvivalent SQL Serveru Sleep():Prohlášení WAITFOR

V SQL Server můžete použít WAITFOR příkaz ke zpoždění provedení dávky, uložené procedury nebo transakce.

Funguje podobně jako sleep() MySQL funkce.

Ve skutečnosti je to pravděpodobně spíše kombinace tří „spánkových“ funkcí Postgresu:pg_sleep() , pg_sleep_for() a pg_sleep_until() .

Říkám to proto, že WAITFOR SQL Serveru vám dává možnost zadat buď časové zpoždění, nebo skutečný pevný čas, než bude provádění pokračovat.

Příklad – Zadejte zpoždění

Chcete-li zadat časové zpoždění, použijte DELAY argument následovaný skutečným časem čekání/spánku.

Zpoždění může být maximálně 24 hodin.

Zde je příklad k demonstraci.

SELECT CURRENT_TIMESTAMP AS [First Timestamp];
WAITFOR DELAY '00:00:10';
SELECT CURRENT_TIMESTAMP AS [Second Timestamp];

Výsledek:

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)

Při použití DELAY je hodnota ve formátu hh:mm[[:ss].mss].

Hodnotu lze zadat buď v datetime datový formát nebo jako lokální proměnná. Data však nelze specifikovat, takže datumová část datetime hodnota není povolena.

Příklad – Zadejte čas

Případně můžete použít TIME argument k určení času, kdy se spustí dávka, uložená procedura nebo transakce.

V tomto případě je zadaná hodnota čas, kdy WAITFOR výpis skončí.

Zde je příklad k demonstraci.

SELECT CURRENT_TIMESTAMP AS [First Timestamp];
WAITFOR TIME '04:33:30';
SELECT CURRENT_TIMESTAMP AS [Second Timestamp];

Výsledek:

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)

Zde je několik věcí, které je třeba mít na paměti ohledně časové hodnoty, kterou zadáte:

  • Čas lze zadat v datetime datový formát, nebo jej lze zadat jako lokální proměnnou.
  • Data nelze určit, proto je to část data datetime hodnota není povolena.
  • Čas je ve formátu hh:mm[[:ss].mss] a volitelně může obsahovat datum 1. 1. 1900.

Skutečné zpoždění se může lišit

Skutečné časové zpoždění se může lišit od času, který zadáte, protože to bude záviset na věcech, jako je zatížení serveru.

Počítadlo času se spustí, když WAITFOR je naplánováno vlákno příkazů. Pokud je server zaneprázdněn, vlákno nemusí být okamžitě naplánováno, takže časové zpoždění může být delší než zadaný čas.

Zprávy zprostředkovatele serveru

WAITFOR příkaz přijímá některé argumenty/hodnoty, které jsou použitelné pouze pro zprávy Service Broker.

Při používání zpráv Service Broker můžete poskytnout RECEIVE nebo GET CONVERSATION GROUP a také TIMEOUT argument, který udává dobu v milisekundách, po kterou se má čekat na doručení zprávy do fronty.

Další informace o těchto možnostech naleznete v oficiální dokumentaci společnosti Microsoft.


  1. Jak nastavit znakovou sadu a řazení tabulky v MySQL

  2. Filtr na výstupní klauzuli sql

  3. Dynamický SQL (EXECUTE) jako podmínka pro příkaz IF

  4. MariaDB JSON_VALUE() vysvětleno