SQL Server:检查值是“IS NULL”还是“=整数值”的优雅方法

时间:2012-11-15 17:13:50

标签: sql syntax null

我有一个表,其中包含一些代码单元(用于索引目的)和一个“值”单元格(我感兴趣的数据存在于其中),类似于以下内容:

 column:      datatype:

  code1         int
  code2         int
  code3         int
  code4         int
  attributes    varchar(max)

我正在检查添加到此表的存储过程中的一些输入代码,并且添加的约束是我的INPUT代码(@ code1,@ code2,@ code3,@ code4)可以等于某个值或者它们可以为null,但与表中某些匹配行中的那些相同。

说出以下声明的最佳方式是什么:

 SET @targetAttributesCell = (SELECT attributes FROM MyTable
                               WHERE (code1 = @code1)
                                 AND (code2 = @code2)
                                 AND (code3 = @code3)
                                 AND (code4 = @code4)); <-- where code1/@code1 'IS NULL' or = '[some integer]'?

提前致谢。如果我需要更清楚,请告诉我。

3 个答案:

答案 0 :(得分:3)

你走了:

WHERE ISNULL(Code4,SomeInteger)=SomeInteger

如果Code4为null,则它将与整数匹配。如果Code4匹配整数,它将匹配整数。如果Code4是任何其他整数,则它将不匹配。

修改

你甚至需要这张支票吗?表中是否有NULL值?如果是这样,则NULL参数将匹配。

答案 1 :(得分:0)

就我而言,它可以工作。 尤其是如果您将零视为值。

ISNULL(cast(@FirstInt如varchar),'')<> ISNULL(cast(@SecondInt如varchar),'')

答案 2 :(得分:-1)

试试这个......

SET @targetAttributesCell = (SELECT attributes FROM MyTable
                               WHERE ( @code1 IS NOT NULL and code1 = @code1)
                                 AND (@code2 IS NOT NULL and code2 = @code2)
                                 AND (@code3 IS NOT NULL and code3 = @code3)
                                 AND (@code4 IS NOT NULL and code4 = @code4)); <-- where code1/@co