通过CASE语句设置值

时间:2012-12-11 18:57:55

标签: sql-server case

我是t-sql编程的新手。我有Java,Javascript和许多其他编程语言的背景。我试图设置@notes变量的值。我的代码如下。

基本上,如果@notes@minBatch不为空,我想要设置@maxBatch变量。我添加了一个打印声明,以确保@minBatch@maxBatch是我传入的值。

简而言之,以下代码有什么问题?

    set @notes =
          case 
            when @minBatch != null and @maxBatch != null then
                case 
                  when @minBatch != @maxBatch then 
                    'Start batch: ' + cast(@minBatch as varchar(8)) + ' End batch: ' + cast(@maxBatch as varchar(8))
                  else 
                    'Batch ' + cast(@minBatch as varchar(8))
                end
            else
              null
          end

1 个答案:

答案 0 :(得分:2)

使用is null代替=null

SELECT @notes = 
     CASE 
         WHEN (@minBatch + @maxBatch) is not null --Comment: if any null result is null 
              THEN
                 CASE @minBatch WHEN @maxBatch --@min or @max still can be null
                      THEN 'Batch ' + cast(ISNULL(@minBatch,0) as varchar(8))
                      ELSE 'Start batch: ' + 
                            cast(ISNULL(@minBatch,0) as varchar(8)) + ' End batch: ' + 
                            cast(ISNULL(@maxBatch,0) as varchar(8))
                 END
         ELSE null
     END
使用(@minBatch + @maxBatch) is not null

简化

编辑

--Comment: if any null result is null