2012-06-27 38 views
10

我想在我的存储过程中使用CASE。我得到了一些语法错误在我的代码:如何在SQL Server中使用开关

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等等。 请让我知道什么是正确的语法。

+2

'CASE'是*表达*返回一个*值*。我不知道你要在这里做什么 - 也许告诉我们总体目标,然后把上面的代码放到更大的示例中来设置上下文? –

+0

这个答案是有用的,如果你真的想做逻辑流而不是选择一个表达式http://stackoverflow.com/a/14760234/74585 –

回答

29

CASE只是一个“开关”到返回一个值 - 不执行一个完整的代码块。

您需要更改您的代码是这样的:

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

如果@temp设置为none这些值(1或2),那么你会得到一个NULL

+0

Tanx为你的答案,我认为'案例'在sqlserver可以采取行动相同的switch- case在c#$( –

+0

使用'ELSE @ selectoneCount' *如果*你想在@Temp不是1或2时创建一个默认情况,并且@selectoneCount不会改变 – woodvi

3

这是一个select语句,所以case的每个分支必须返回一些东西。如果你想执行操作,只需使用if。

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

    select @selectoneCount 
1

其实我从另一个sp获取返回值到@temp然后它@temp = 1然后我想增加@SelectoneCount的计数1等等。请让我知道什么是正确的语法。

出了什么问题:

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

(虽然这臭气的是程序代码 - 通常不使用SQL的最佳方式)

+1

没有错,如果我有15-20条件,所以我想用switch# –

+1

@RamSingh - 在SQL语言中没有switch *语句*正如其他人所指出的,你可以使用'CASE' *表达式*,但它必须计算并返回一个标量值。 –

+1

好的,谢谢,这意味着我必须使用,如果其他情况。 –