while和if case case语句中的条件t-sql

时间:2016-09-26 20:41:45

标签: sql sql-server tsql

我正在尝试在case语句中实现while循环和if条件(带函数调用)。基本上,我试图这样做:

begin
    case
       when (condition1 and condition 2 and ncolumn_num between 6 and 9) 
          then
             while @i < 10
             begin
                 if(hsip.Is_numeric( hsip.getTempResponseById(@cregion, @cState_code, @nFY, @nReport_id, @nsection_id, @nquestion_number, @ndisplay_number, @nquestion_number, @nquestion_part_number, @suser_id, @nrow_number, i, @suser_id)))

@nrunningtotal = @nrunningtotal + hsip.getTempResponseById(@cRegion, @cState_code, @nFY, @nReport_id, @nsection_id, @nquestion_number, @ndisplay_number, @nquestion_number,
    @nquestion_part_number, @suser_id, @nrow_number, @ncolumn_number, @suser_id)

        end if
end

我可以在case语句中实现while循环和if条件。我的业务逻辑要求我将列数从6增加到9,最终总数为col:10。

我有两个函数:gettempresponsebyid:返回响应字符串和isnumeric函数,它转换为数字。

有人可以建议一个更好的方法。我收到这个错误:

  

如果语法不正确并且语法不正确,则会出现错误。

1 个答案:

答案 0 :(得分:3)

问:我可以在case语句中实现while循环和条件。

答:不。CASE不是T-SQL 声明。这是表达式

https://msdn.microsoft.com/en-us/library/ms181765.aspx

在发布的代码中,一个很大的语法问题就在这里开始:

BEGIN CASE ...
      ^

使用IF / ELSE语句有条件地控制T-SQL中的流。

https://msdn.microsoft.com/en-us/library/ms182717.aspx

首先,使用CASE语句替换IF表达式的无效用法。

BEGIN
  IF (condition1 AND condition2 AND ncolumn_num between 6 and 9)
    BEGIN
      ...
    END;
  END IF;
END;

但即使有了这种改变,仍然不清楚你想要实现的目标或者你想要解决的问题。可能有更好的方法来做你想做的事情,但我们只是猜测你想要做什么。