0

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

 column:      datatype:

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

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

说出以下陈述的最佳方式是什么:

 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]'?

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

4

3 回答 3

3

干得好:

WHERE ISNULL(Code4,SomeInteger)=SomeInteger

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

编辑

你还需要这张支票吗?您的表中是否有 NULL 值?如果是这样,那么 NULL 参数将匹配。

于 2012-11-15T17:31:41.540 回答
0

就我而言,它有效。特别是如果您将零视为一个值。

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

于 2019-01-23T14:18:50.963 回答
-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
于 2012-11-15T17:19:13.317 回答