Введение в программирование SQL Server. Создание и управление базой данных. Инструменты целостности данных, страница 6

 WHEN when_expression THEN result_expression

 [ ...n ]

 [

  ELSE else_result_expression

 ]

END

Пример

Следующий пример рассматривает инвентаризацию статуса продуктов в таблице Products и возвращает сообщение, основанное на количестве доступных и количестве возвращённых счетов, и какие продукты были прерваны:

SELECT ProductID, 'Статус продуктов' =

CASE

WHEN (UnitsInStock < UnitsOnOrder AND Discontinued=0)

THEN 'Негативная инвентаризация - Оплатить сейчас!'

WHEN ((UnitsInStock - UnitsOnOrder) < ReorderLevel AND Discontinued=0)

THEN 'Сделать повторный заказ!'

WHEN (Discontinued=1) THEN 'Остановленный'

ELSE 'В наличии'

END

FROM Northwind..Products

Результат:

ProductID   Статус продуктов                             

----------- --------------------------------------------

1           В наличии

2           Негативная инвентаризация - Оплатить сейчас!

3           Негативная инвентаризация - Оплатить сейчас!

4           В наличии

5           Остановленный

.

.

(77 row(s) affected)

Комментарии

Комментарии – это не выполняемые строки текста помещённые в операторы для описания действий, которые выполняет оператор или для отмены одной или нескольких строк оператора. Вы можете использовать комментарии одним из следующих путей – строчный и блочный.

Строчный комментарий.

Вы может создать блочный комментарий, используя знак двойного тире (--), для установки комментария начиная с этих знаков. Язык Transact-SQL игнорирует текст справа от знака комментария.

Пример

–- Пример комментариев. Этот текст будет проигнорирован

SELECT ProductName –- Этот текст тоже будет проигнорирован

FROM Products

Блочные комментарии.

Вы можете создавать блочные комментарии, если поместите вначале знак (/*), а в конце (*/). Такие комментарии часто используются вначале скрипта для описания его работы, параметров и любой дополнительной информации.

Пример

/*

Этот пример скрипта демонстрирует работу

Многострочного комментария. Весь этот текст

Будет проигнорирован при выполнении скрипта

*/

SELECT ProductName

FROM Products

Вы можете также комментировать код, чтобы при выполнении скрипта определённые участки пропускались:

Пример

/*

SELECT ProductName

FROM Products

*/

В этом примере полностью закомментирован весь код скрипта и ничего не будет выполнено.

2.4 Способы выполнения операторов Transact-SQL

Вы можете выполнять операторы Transact-SQL создавая операторы динамически или с помощью использования batch (партий), скриптов или транзакций. Вы также можете использовать Extensible Markup Language (XML) для отображения данных на WEB странице.

Динамическое построение операторов

Вы можете строить операторы динамически так, чтобы они создавались в то же время, когда SQL Server будет их выполнять. Для выполнения операторов динамически используйте оператор EXECUTE вместе с набором строк запроса.

EXEC [ UTE ] ( { @string_variable | [ N ] 'tsql_string' } [ + ...n ] )

Вы устанавливаете опции динамически, и переменные и временные таблицы, которые вы создаете, существуют только пока SQL Server выполняет операторы. Рассматривайте следующие замечания об операторе EXECUTE:

*  Оператор EXECUTE выполняет операторы собранные в строку символов набора Transact-SQL. Так как это строковые литералы, убедитесь, что вы добавили пробелы в необходимых местах для обеспечения соответствующего объединения.

*  Все члены строки EXECUTE должны быть в виде строковых данных. Вы должны конвертировать все числа перед выполнением оператора EXECUTE.

*  Вы не можете использовать функции для создания строк для выполнения.

Пример 1

Этот пример демонстрирует, как вы можете использовать динамически выполняемый оператор для выбора всех колонок и строк из базы данных. С помощью встроенных процедур, пользователь передаёт информацию о таблице и базе данных в операторы в качестве параметров и после этого выполняет запрос к указанной таблице базы данных:

DECLARE @dbname varchar(30), @tablename varchar(30)

SET @dbname = 'Northwind'

SET @tablename = 'Products'

EXECUTE('USE '+@dbname+' SELECT ProductName FROM '+@tablename)