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.