Sql Server IN子句问题

时间:2012-01-05 17:20:46

标签: sql sql-server

编写将具有多个输入参数的存储过程。参数可能并不总是具有值,可能为空。但由于存在每个参数可能包含值的可能性,我必须包括在查询中使用这些参数的标准。

我的查询看起来像这样:

SELECT DISTINCT COUNT(*) AS SRM
FROM table p
WHERE p.gender IN (SELECT * FROM Fn_SplitParms(@gender)) AND 
p.ethnicity IN (SELECT * FROM Fn_SplitParms(@race)) AND 
p.marital_status IN (SELECT * FROM Fn_SplitParms(@maritalstatus)) 

所以我的问题是如果@gender为空(''),当我真的想忽略p.gender时,查询将返回性别字段为空的数据。我不想使用IF / ELSE条件语句来完成这项任务,因为它们太多了。

在这种情况下,有没有办法将IN与CAS一起使用?要么 还有其他我不理解的逻辑会解决这个问题吗?

找不到合适的东西......

谢谢!

2 个答案:

答案 0 :(得分:2)

使用or

SELECT DISTINCT COUNT(*) AS SRM
FROM table p
WHERE 
(p.gender IN (SELECT * FROM Fn_SplitParms(@gender)) OR @gender = '')
AND (p.ethnicity IN (SELECT * FROM Fn_SplitParms(@race)) OR @race = '')
AND (p.marital_status IN (SELECT * FROM Fn_SplitParms(@maritalstatus)) OR @maritalstatus = '')

答案 1 :(得分:0)

您可能还想考虑表值参数(if using SQL Server 2008 and up) - 这些参数有时会使代码更简单,因为它们被视为表格(在您的情况下,可能是空的)并且您可以加入 - 加上不需要笨拙的分割功能。