sql如果参数为true,则添加where子句
我有一个包含交叉连接和左连接的长存储过程。我在这个表中有几个参数。在最后两个左连接上,我想添加一个基于参数的条件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代码。这是最后两
@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重试。