Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql如果参数为true,则添加where子句_Sql_Sql Server 2008_Tsql - Fatal编程技术网

sql如果参数为true,则添加where子句

sql如果参数为true,则添加where子句,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,我有一个包含交叉连接和左连接的长存储过程。我在这个表中有几个参数。在最后两个左连接上,我想添加一个基于参数的条件where子句 我将调用这个参数@NonCAT,它基本上是类别代码。我试图实现的where子句删除了非类别代码。非类别代码的代码如下所示: CATCOD IN ('0', '114', '214', '314', '414', '614') 因此,CATCOD列中的任何数字都被视为非编码。 否则,如果它们被包括在内,比如如果它们不在where子句中,则它们被视为cat代码。这是最后两

我有一个包含交叉连接和左连接的长存储过程。我在这个表中有几个参数。在最后两个左连接上,我想添加一个基于参数的条件where子句

我将调用这个参数
@NonCAT
,它基本上是类别代码。我试图实现的where子句删除了非类别代码。非类别代码的代码如下所示:

CATCOD IN ('0', '114', '214', '314', '414', '614')
因此,
CATCOD
列中的任何数字都被视为非编码。 否则,如果它们被包括在内,比如如果它们不在where子句中,则它们被视为cat代码。这是最后两个左连接中的where子句:

AND CASE
       WHEN il.CATCOD IN ('0', '114', '214', '314', '414', '614') 
          THEN 'NonCAT'
          ELSE 'CAT'
    END = @NonCAT
如果我试图提取类别代码,
@NonCAT
变量只是一个
varchar(20)
,为了测试,现在将其值设置为'NonCAT'。有了where子句,我将提取非cat代码

我想要一个条件语句,比如如果变量
@NonCAT='CAT'
,我想省略where子句。我该怎么做呢?我试过各种各样的案例陈述,比听起来更难。非常感谢你的帮助

编辑:例如,我尝试在where子句中使用
iff
语句

AND (IF @NonCAT = 'NonCAT'
     BEGIN
         CASE
            WHEN il.CATCOD IN ('0', '114', '214', '314', '414', '614') 
               THEN 'NonCAT'
               ELSE 'CAT'
         END = @NonCAT
     END)

看来这不管用。我可以在代码最需要的时候使用IF语句作为标志,但这似乎不是很有效,因为如果有意义的话,我必须重写整个过程,而不使用where子句

你的意思是这样的

WHERE   ( ( @nonCAT = 'nonCAT' AND il.CATCOD IN ('0', '114', '214', '314', '414', '614') )
      OR ( (ISNULL(@nonCAT,'') <> 'nonCAT' ))
其中(@nonCAT='nonCAT'和il.CATCOD位于('0','114','214','314','414','614'))
或((ISNULL(@nonCAT,)“nonCAT”))

Hi我认为这很接近,但第二个逻辑ISNULL(il.CATCOD,'NULL')不在('0','114','214','314','414','614')中,如果变量@NonCAT'NonCAT',我实际上希望在该列中包含所有内容。我尝试将其修改为:and(atNonCAT='NonCAT'和il.CATCOD在('0','114','214','314','414','614'))或((ISNULL(atNonCAT,”)“NonCAT”和il.CATCOD=il.CATCOD))因此,基本上,我希望在变量atNonCAT不等于“NonCAT”时输出所有CATCOD列。还值得一提的是,CATCOD列是一个int列,所以我只是删除了ISNULL(il.CATCOD,'NULL')@Lisbon重试。