В этом учебном пособии вы узнаете, как использовать WHILE LOOP в SQL Server (Transact-SQL) с синтаксисом и примерами.
Описание
В SQL Server WHILE LOOP используется тогда, когда вы не уверены, сколько раз вы будет выполняться тело цикла, и тело цикла может не выполняться даже один раз.
Синтаксис
Синтаксис WHILE LOOP в SQL Server (Transact-SQL):
BEGIN
{... statements...}
END;
Параметры или аргументы
condition – условие, которое проверяется при каждом прохождении через цикл. Если условие имеет значение TRUE, выполняется тело цикла. Если условие оценивается как FALSE, цикл завершается.
statements - кода для выполнения при каждом прохождении через цикл.
Примечание
- Вы должны использовать инструкцию WHILE LOOP, если не знаете, сколько раз вы хотите, чтобы тело цикла выполнялось.
- Поскольку условие WHILE оценивается перед входом в цикл, возможно, что тело цикла может не выполняться даже один раз.
- См. также оператор BREAK для выхода из WHILE LOOP раньше.
- См. также оператор CONTINUE для перезапуска WHILE LOOP с самого начала.
Пример
Рассмотрим пример использования WHILE LOOP в SQL Server (Transact-SQL).
Например:
1 2 3 4 5 6 7 8 9 10 11 |
DECLARE @site_id INT; SET @site_id = 0; WHILE @site_id <= 10 BEGIN PRINT 'Inside WHILE LOOP on yandex.com'; SET @site_id = @site_id + 1; END; PRINT 'Done WHILE LOOP on yandex.com'; GO |
В этом примере WHILE LOOP цикл завершится, как только значение @site_id превысит 10, как указано в строке:
1 |
WHILE @site_id <= 10 |
WHILE LOOP будет продолжаться в то время как @site_id <= 10. И как только @site_id будет > 10, цикл завершится.
Вы также можете использовать WHILE LOOP в курсоре.
Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
DECLARE contacts_cursor CURSOR FOR SELECT contact_id, site_id FROM contacts; OPEN contacts_cursor; FETCH NEXT FROM contacts_cursor; WHILE @@FETCH_STATUS = 0 BEGIN FETCH NEXT FROM contacts_cursor; PRINT 'Inside WHILE LOOP on Yandex.com'; END; PRINT 'Done WHILE LOOP on Yandex.com'; CLOSE contacts_cursor; DEALLOCATE contacts_cursor; GO |
В этом примере WHILE LOOP цикл прекращается, как только @@FETCH_STATUS больше не равен 0, как указано:
1 |
WHILE @@FETCH_STATUS = 0 |