2
重做现有存储过程以使先前需要的参数成为可选参数。带有一个可选参数的SQL多条件WHERE子句?
该查询是巨大的,处理比我当前的问题更多,所以我不会发布它的全部,但我相信我可以通过编辑WHERE
子句之一来获得我的修复程序。
WHERE
O.wsID = @wsid AND
((M.UpdateDate BETWEEN @olddate AND @newdate) OR (MI.UpdateDate BETWEEN @olddate AND @newdate))
的第一个参数是@wsid
我需要做可选的价值,它的最初声明为0,并从一个选择框的网站的前端赋予了新的价值。我试图使用CASE
语句在WHERE
子句之间切换,具体取决于值是0还是实际ID。
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
声明。
是否有更容易的选项使O.wsid = @wsid
参数可选?
我简直不敢相信那么简单......好吧,那就是星期一上午。谢谢,完美的作品。 – Wompguinea
只需要小心,“OR @wsid = 0”可能会导致表扫描。选项(RECOMPILE)防止这种情况发生。 – under
@下是的,你说得对。有时候这可能是痛苦的 – Backs