编写将具有多个输入参数的存储过程。参数可能并不总是具有值,可能为空。但由于存在每个参数可能包含值的可能性,我必须包括在查询中使用这些参数的标准。
我的查询看起来像这样:
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一起使用?要么 还有其他我不理解的逻辑会解决这个问题吗?
找不到合适的东西......
谢谢!
答案 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) - 这些参数有时会使代码更简单,因为它们被视为表格(在您的情况下,可能是空的)并且您可以加入 - 加上不需要笨拙的分割功能。