SQL多条件WHERE子句带有一个可选参数?

时间:2017-05-15 01:51:49

标签: sql-server

重新处理现有的存储过程,使先前需要的参数可选。

查询量大,并且处理的内容远远超过我当前的问题,所以我不会将其全部发布,但我相信我可以通过编辑其中一个{{1条款。

WHERE

第一个参数WHERE O.wsID = @wsid AND ((M.UpdateDate BETWEEN @olddate AND @newdate) OR (MI.UpdateDate BETWEEN @olddate AND @newdate)) 是我需要进行选择的值,它最初被声明为0,并从网站前端的选择框中获得一个新值。我试图使用@wsid语句在CASE子句之间切换,具体取决于值是0还是实际ID。

WHERE

但是我在WHERE @wsid = CASE WHEN @wsid <> 0 THEN ((O.wsID = @wsid) AND ((M.UpdateDate BETWEEN @olddate AND @newdate) OR (MI.UpdateDate BETWEEN @olddate AND @newdate))) ELSE ((M.UpdateDate BETWEEN @olddate AND @newdate) OR (MI.UpdateDate BETWEEN @olddate AND @newdate))) END 子句本身中遇到了一堆语法错误,并且在下面的WHERE语句中出现了Expecting CONVERSATION or TRY错误。

是否有更简单的选项可以使SELECT参数可选?

1 个答案:

答案 0 :(得分:2)

WHERE
        (O.wsID = @wsid OR @wsid = 0) AND 
        ((M.UpdateDate BETWEEN @olddate AND @newdate) OR (MI.UpdateDate BETWEEN @olddate AND @newdate))