В SQL Server можете да използвате WAITFOR
изявление за забавяне на изпълнението на партида, съхранена процедура или транзакция.
Работи подобно на sleep()
на MySQL функция.
Всъщност вероятно това е по-скоро комбинация от трите функции за „сън“ на Postgres:pg_sleep()
, pg_sleep_for()
и pg_sleep_until()
.
Казвам това, защото WAITFOR
на SQL Server операторът ви дава възможност да посочите или времево забавяне, или действително фиксирано време, преди изпълнението да продължи.
Пример – Посочете забавяне
За да посочите закъснение, използвайте DELAY
аргумент, последван от действителното време за чакане/сън.
Закъснението може да бъде максимум 24 часа.
Ето пример за демонстрация.
SELECT CURRENT_TIMESTAMP AS [First Timestamp];
WAITFOR DELAY '00:00:10';
SELECT CURRENT_TIMESTAMP AS [Second Timestamp];
Резултат:
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)
Когато използвате DELAY
опция, стойността се форматира като hh:mm[[:ss].mss].
Стойността може да бъде посочена или в дата и час формат на данни или като локална променлива. Датите обаче не могат да бъдат посочени, така че частта с датата на datetime стойността не е разрешена.
Пример – Посочете час
Като алтернатива можете да използвате TIME
аргумент за указване на време, когато се изпълняват партидата, съхранената процедура или транзакцията.
В този случай предоставената стойност е времето, в което WAITFOR
изявлението завършва.
Ето пример за демонстрация.
SELECT CURRENT_TIMESTAMP AS [First Timestamp];
WAITFOR TIME '04:33:30';
SELECT CURRENT_TIMESTAMP AS [Second Timestamp];
Резултат:
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)
Ето някои неща, които трябва да имате предвид относно стойността на времето, която предоставяте:
- Часът може да бъде посочен в дата и час формат на данни или може да бъде посочен като локална променлива.
- Дати не могат да бъдат посочени, така че частта с датата на datetime стойността не е разрешена.
- Часът е форматиран като hh:mm[[:ss].mss] и по избор може да включва датата 1900-01-01.
Действителното забавяне може да варира
Действителното забавяне може да варира от времето, което сте посочили, тъй като това ще зависи от неща като натоварване на сървъра.
Броячът на времето стартира, когато WAITFOR
нишката на изявленията е насрочена. Ако сървърът е зает, нишката може да не бъде насрочена незабавно, така че забавянето може да е по-дълго от определеното време.
Съобщения на сървърния брокер
WAITFOR
операторът приема някои аргументи/стойности, които са приложими само за съобщения на Service Broker.
Когато използвате съобщения на Service Broker, можете да предоставите RECEIVE
изявление или GET CONVERSATION GROUP
оператор, както и TIMEOUT
аргумент, който определя периода от време в милисекунди, за да се изчака съобщението да пристигне на опашката.
Вижте официалната документация на Microsoft за повече информация относно тези опции.