Оператор SELECT внутри предложения CASE в TSQL выдает ошибку - PullRequest
1 голос
/ 19 ноября 2011

Мне пришлось настроить кучу хранимых процедур и получить одну, в которой было загружено IF ELSE blocks, в них были операторы вставки с транзакциями. Следовательно, я смоделировал их, используя case, чтобы найти, что я получаю синтаксические ошибки, попробуйте следующее утверждение (простой пример того, что делается), но уверен, что вы поймете идею

DECLARE @rowcount int
SELECT @rowcount = -1
 CASE WHEN @rowcount = -1 THEN
    select 'I WON THE RACE'
 WHEN '2' 
    SELECT 'WHAT A LOSER'
 END

В каждом случае есть более одного утверждения, поэтому я просто заключил их в ( и ), но теперь нет. Пожалуйста, исправьте мои знания Case в TSQL. (используя SQl Server 2005, если это поможет)

Ответы [ 4 ]

8 голосов
/ 19 ноября 2011

Вы хотите, чтобы ваш оператор CASE выглядел так:

DECLARE @rowcount int
SELECT @rowcount = -1;
SELECT CASE @rowcount
          WHEN -1 THEN 'I WON THE RACE'
          WHEN 2 THEN 'I did not win'
       END AS columnName

CASE входит внутрь оператора SELECT.Тогда вы просто посмотрите на значение вашего @rowCount и примите соответствующие меры.Возможно, вы захотите узнать больше об операторе CASE

Вторая форма оператора CASE выглядит следующим образом:

SELECT CASE 
   WHEN @rowcount IS NULL THEN 'Null case here'
   WHEN @rowcount = -1 THEN 'I WON THE RACE'
   WHEN @rowcount = 2 THEN 'I did not win'
END AS columnName

Если вы хотите использовать операторКОРПУС с ВСТАВКОЙ:

DECLARE @rowcount int
SELECT @rowcount = -1;

INSERT INTO myTable(column1, column2, column3)
SELECT CASE @rowcount
          WHEN -1 THEN 'I WON THE RACE'
          WHEN 2 THEN 'I did not win'
       END AS column1
   , t.column2
   , CASE
        WHEN t.someColumn < someValue THEN 'thirdColumnValue'
        ELSE 'someColumn is greater than specified value'
     END AS column3
FROM secondTable AS t
1 голос
/ 19 ноября 2011

Вы путаете T-SQL SELECT...CASE с VisualBasic SELECT CASE.

T-SQL:

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

VB:

Select...Case выполняет одну из нескольких групп операторов в зависимости от значение выражения.

Было бы неплохо, если бы в T-SQL был эквивалент, но его нет. Вот что доступно в T-SQL.

1 голос
/ 19 ноября 2011

Из вашего комментария может показаться, что вы хотите использовать оператор IF, если вы пытаетесь сделать 2 разных вставки / несколько операторов?

IF @rowcount = -1
BEGIN
  <stmt1>
  <stmt2>
END

IF @rowcount = 2
BEGIN
  <stmt3>
  <stmt4>
END
0 голосов
/ 19 ноября 2011

только предложение Вы также можете использовать набор set @rowcount = -1;

DECLARE @rowcount int
set @rowcount = -1;
 select  CASE @rowcount WHEN -1 THEN
     'I WON THE RACE'
 WHEN '2' then
    'WHAT A LOSER'
 END Status
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...