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