动态添加WHERE的MSSQL存储过程?

时间:2016-12-07 09:16:58

标签: sql sql-server stored-procedures dynamic

我有这个存储过程,我需要检查@DateChk == 1,然后我想在SP中的SQL语句中添加WHERE子句。如果为0,则不应该有任何WHERE子句。

我如何编写这样的功能?在一个程序中,我可以在字符串中构建传递给服务器,但我还没有找到任何方法在SQL服务器中执行此操作。

SELECT  dateDay, SUM(nok) as NOK, SUM(ok) as OK,  (SUM(ok) + SUM(nok)) as 'Total'
FROM #st
SELECT CASE @DateChk
WHEN 1: WHERE dateDay BETWEEN '2016-08-01' AND '2016-08-31'

像这样,如果@DateChk = 1,应该添加WHERE,否则获取所有记录。

1 个答案:

答案 0 :(得分:3)

您可以像这样修改您的条件:

SELECT  dateDay, SUM(nok) as NOK, SUM(ok) as OK,  (SUM(ok) + SUM(nok)) as 'Total'
FROM #st
WHERE 
(@DateChk = 1 and (dateDay BETWEEN '2016-08-01' AND '2016-08-31'))
or @DateChk = 0

它将完全符合您的预期行为:dateDay上的条件仅在@DateChk = 1时适用。

相关问题