Как использовать Switch в SQL Server

Я хочу использовать CASE в моей хранимой процедуре. Я получаю некоторую синтаксическую ошибку в моем коде:

select 
   case @Temp
   when 1 then (@[email protected]+1)
   when 2 then (@[email protected]+1)
   end

При запуске я получаю:

неправильный синтаксис рядом с '='.

на этой строке:

@selectoneCount = @selectoneCount + 1

около равного.

На самом деле, я получаю возвращаемое значение из другого sp в @temp, а затем он @temp = 1, тогда я хочу включить счет @SelectoneCount на 1 и так далее. Пожалуйста, дайте мне знать, что такое правильный синтаксис.

Ответ 1

CASE - это просто "переключатель", чтобы вернуть значение - не выполнять весь блок кода.

Вам нужно изменить код на что-то вроде этого:

SELECT 
   @selectoneCount = CASE @Temp
                         WHEN 1 THEN @selectoneCount + 1
                         WHEN 2 THEN @selectoneCount + 1
                     END

Если @temp не установлено ни одно из этих значений (1 или 2), вы вернетесь к NULL

Ответ 2

Это оператор select, поэтому каждая ветвь корпуса должна что-то возвращать. Если вы хотите выполнить действия, просто используйте if.

Ответ 3

    select 
       @selectoneCount = case @Temp
       when 1 then (@selectoneCount+1)
       when 2 then (@selectoneCount+1)
       end

   select  @selectoneCount 

Ответ 4

На самом деле, я получаю возвращаемое значение из другого sp в @temp, а затем он @temp = 1, тогда я хочу включить счет @SelectoneCount на 1 и так далее. Пожалуйста, дайте мне знать, что такое правильный синтаксис.

Что случилось с:

IF @Temp = 1 --Or @Temp = 2 also?
BEGIN
    SET @SelectoneCount = @SelectoneCount + 1
END

(Несмотря на то, что это относится к процессуальному коду - обычно это не лучший способ использовать SQL)