25

我想CASE在我的存储过程中使用。我的代码中出现一些语法错误:

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

运行时,我得到:

'=' 附近的语法不正确。

在这一行:

@selectoneCount = @selectoneCount + 1

接近相等。

实际上,我正在从另一个 sp 获取返回值到 @temp 中,然后如果 @temp =1 则我想将 @SelectoneCount 的计数增加 1,依此类推。请让我知道什么是正确的语法。

4

4 回答 4

56

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

您需要将代码更改为以下内容:

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

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

于 2012-06-27T06:04:53.467 回答
3

这是一个 select 语句,因此 case 的每个分支都必须返回一些内容。如果要执行操作,只需使用 if。

于 2012-06-27T06:01:13.337 回答
3
    select 
       @selectoneCount = case @Temp
       when 1 then (@selectoneCount+1)
       when 2 then (@selectoneCount+1)
       end

   select  @selectoneCount 
于 2012-06-27T06:08:28.173 回答
2

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

有什么问题:

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

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

于 2012-06-27T06:25:09.577 回答