我有一个表,它由一些代码单元格(用于索引目的)和一个"值"单元格(我感兴趣的数据所在的位置)组成,类似于以下内容:
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]'?
提前谢谢。如果我需要更清楚,请告诉我。
你来了:
WHERE ISNULL(Code4,SomeInteger)=SomeInteger
如果 Code4 为 null,它将匹配整数。 如果 Code4 与整数匹配,它将匹配整数。 如果 Code4 是任何其他整数,则它不会匹配。
编辑
你甚至需要这个检查吗? 表中是否有空值? 如果是这样,则 NULL 参数将匹配。
就我而言,它有效。特别是如果您将零视为值。
ISNULL(cast(@FirstInt as varchar),'')<>ISNULL(cast(@SecondInt as varchar),'')
试试这个...
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