Аналогична оператору CASE в языках программирования. В MS SQL Server 2008 оператор CASE имеет два возможных варианта использования.
1. С входным выражением:
CASE <входное выражение>
WHEN <выражение when > THEN <результат>
[...]
[ELSE <результат>]
END
Пример:
SELECT TOP 10 SalesOrderID, SalesOrderID % 10 AS ‘Last Digit’, Position = CASE SalesOrderID % 10
WHEN 1 THEN ‘Один’
WHEN 2 THEN ‘Два’
WHEN 3 THEN ‘Три’
WHEN 4 THEN ‘Четыре’
ELSE ‘Другое’
END
FROM Sales.SalesOrderHeader;
Результат запроса представлен на рис. 3.1.
Рис. 3.1. Результат использования оператора CASE
2. Без входного выражения:
CASE
WHEN <логическое выражение> THEN <результат>
[...]
[ELSE <результат>]
END
Используется, как правило, для поиска.
Пример:
SELECT TOP 10 SalesOrderID % 10 AS 'OrderLastDigit',
ProductID % 10 AS 'ProductLastDigit',
"How Close?" = CASE
WHEN (SalesOrderID % 10) < 3 THEN 'Меньше трёх'
WHEN ProductID = 6 THEN 'ProductID равен 6'
WHEN ABS(SalesOrderID % 10 - ProductID) <= 1 THEN ' В пределах одного'
ELSE 'Больше одного'
END
FROM Sales.SalesOrderDetail
ORDER BY SalesOrderID DESC;
Результат выполнения запроса представлен на рис. 3.2.
Рис. 3.2. Результат использования оператора CASE
Transact-SQL поддерживает единственный тип цикла – цикл WHILE, синтаксис которого следующий:
WHILE условие
Оператор
[BREAK | CONTINUE]
Замечание. Вертикальная черта в описании синтаксиса означает «или», т.е. в данном примере может быть указан либо BREAK, либо CONTINUE.
Тело цикла выполняется до тех пор, пока условие истинно. Цикл можно принудительно остановить, если выполнить в теле цикла команду BREAK. Если же нужно начать цикл заново, не дожидаясь выполнения команд тела цикла, необходимо выполнить команду CONTINUE.
В некоторых случаях требуется отложить выполнение той или иной команды. Для этих целей можно воспользоваться оператором WAITFOR. Эта команда имеет следующий синтаксис:
WAITFOR DELAY <’time’> | TIME <’time’>
Если используется параметр DELAY, то указывается, сколько времени необходимо ждать MS SQL Server. Максимально возможная задержка – 24 часа. Пример использования: WAITFOR DELAY ‘01:00’, который приостановит выполнение на один час.
Если используется параметр TIME, то исполнение будет приостановлено до наступления заданного времени. Пример использования: WAITFOR TIME ‘01:00’ – приостановление выполнения кода до наступления часа ночи.