Программирование в Microsoft SQL Server 2000

         

CASE


В большинстве языков программирования оператор CASE является расширенной формой оператора IF, которая позволяет вам определять множество булевых выражений в одном операторе. В SQL Server CASE является функцией, а не командой. Она используется не сама по себе, как IF. а как часть оператора SELECT или UPDATE.

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

значение = выражение

Значение может быть сколь угодно сложным. Вы можете использовать константу, имя столбца, или составное выражение, если необходимо. В качестве оператора сравнения всегда используется равенство. Синтаксис простой структуры CASE представлен ниже:

CASE значение WHEN выражение_один THEN результирующее_выражение_один WHEN выражение_два THEN результирующее_выражение_два . . . WHEN выражение_n THEN результирующее_выражение_n [ELSE альтернативное_результирующее_выражение] END

В этой форме функции CASE, выражение результирующее_выражение возвращается, только в том случае, если выражение, следующее за ключевым словом WHEN, логически равно указанному значению. Вы можете использовать в выражение любое количество фраз WHEN. Фраза ELSE необязательна – она выполняется, только если все фразы WHEN оцениваются как FALSE.

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

CASE WHEN булево_выражение_один THEN результирующее_выражение_один WHEN булево_выражение_два THEN результирующее_выражение_два . . . WHEN булево_выражение_n THEN результирующее_выражение_n [ELSE альтернативное_результирующее_выражение] END

В этой форме CASE вы можете указать целое булево выражение в каждой фразе WHEN вместо неявного сравнения выражения в простой форме. Учтите, что при определении истинности можно оценивать несколько булевых_выражений. Transact-SQL возвратит только первое результирующее_выражение, а затем перейдет к оператору, следующему за END.

Используйте простую структуру CASE

  1. В окне Query (Запрос) выберите вкладку Editor (Редактор), а затем нажмите кнопку Clear Window (Очистить окно).
    Query Analyzer очистит окно.
  2. В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).
    Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла сценария).


  3. Выделите сценарий с именем SimpleCase и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.


  4. В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить сценарий).
    Query Analyzer отобразит результат выполнения запроса.





  • Выделите сценарий с именем SimpleCase и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.



  • В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить сценарий).
    Query Analyzer отобразит результат выполнения запроса.





  • Используйте поисковую форму структуры CASE

    1. В окне Query (Запрос) выберите вкладку Editor (Редактор), а затем нажмите кнопку Clear Window (Очистить окно).
      Query Analyzer очистит окно.
    2. В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Load Script (Загрузить сценарий).
      Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).



    3. Выделите сценарий с именем SimpleCase и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий.



    4. В панели инструментов анализатора запросов Query Analyzer нажмите кнопку Execute Query (Выполнить запрос).
      Query Analyzer отобразит результат выполнения запроса. Обратите внимание, что хотя третья запись, содержащая в качестве значения поля OilName 'Bergamot', отвечает условию для второй фразы WHEN (LEFT(LatinName,1) = 'C'), она возвращает в качестве значения поля TestResults 'Name B', поскольку она отвечает и первому булевому выражению.






    Содержание раздела