SQL Server:检查值“是否为NULL”或“=整数值”的优雅方法

SQL Server:检查值“是否为NULL”或“=整数值”的优雅方法,sql,syntax,null,Sql,Syntax,Null,我有一个表,其中包含一些用于索引目的的代码单元格,以及一个我感兴趣的数据所在的值单元格,类似于以下内容: column: datatype: code1 int code2 int code3 int code4 int attributes varchar(max) 我正在检查添加到此表的存储过程中的一些输入代码,添加的约束条件是,我的输入代码@code1、@code2、@code3、@c

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

 column:      datatype:

  code1         int
  code2         int
  code3         int
  code4         int
  attributes    varchar(max)
我正在检查添加到此表的存储过程中的一些输入代码,添加的约束条件是,我的输入代码@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]'?
提前谢谢。请让我知道,如果我需要更清楚

试试这个

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
给你:

WHERE ISNULL(Code4,SomeInteger)=SomeInteger
如果Code4为null,它将匹配整数。如果Code4与整数匹配,它将与整数匹配。如果Code4是任何其他整数,它将不匹配

编辑

你需要这张支票吗?表中是否有空值?如果是这样的话,那么空参数就会匹配。

在我的例子中,它是有效的。 特别是如果你把零当作一个值


ISNULLcast@FirstInt作为瓦查尔,ISNULLcast@SecondInt作为varchar,

据我所知,这是错误的逻辑。。。op是否希望code1为空或code1=@code1?作为@Dems注释。如果code1=@code1为真,则@code1不为空检查是多余的。或者甚至可能是code1为空或@code1为空或code1=@code1?在标记此项之前,请阅读标题。UB3571询问如何检查……这些代码是否不为空,是否等于整数值。我不明白你为什么认为这个逻辑是错误的。UB3571请尝试让我们知道这是否是您想要的。呃,标题中有“或”一词,而不是和。。。SQL Server:检查值“是否为NULL”或“=整数值”的优雅方法,就像问题的主体一样…如果您不确定自己是否清楚,请给出示例数据以及预期的行为/结果。Ooh。“我喜欢这个,”吉姆说。这看起来比我的解决方案好。我觉得ISNULL会为我提供正确的解决方案。现在检查一下。是的,顺便说一句,空值在表中,但无论出于什么原因,当我进行检查时,它不起作用。这非常有效。我所做的是:其中ISNULLcode1,0=ISNULL@code1,0非常感谢您仔细阅读我的整个问题:要优雅地检查空值,还可以在Code4为空参考的位置执行以下操作: