我想創建一個存儲過程。如果參數是-1,那麼在該列上不應該有where子句,否則應該有WHERE子句。沒有大量IF分支的最好方法是什麼?SQL Server 2000存儲過程與參數分支
我檢查了存檔。有幾個類似的問題,但不完全相同。
CREATE PROCEDURE report
(
@site int,
@promo int,
@type int
)
AS
SET NOCOUNT ON
-- I want to avoid this:
IF @site = -1 AND @promo = -1 and @type = -1
BEGIN
SELECT * from table
END
IF @site > -1 AND @promo = -1 and @type = -1
BEGIN
SELECT * from table WHERE site = @site;
END
... -- other cases
ELSE -- all parameters are > -1
BEGIN
SELECT * from table
WHERE site = @site AND promo = @promo AND type = @type
END
用於NULLIF/ISNULL技巧的+1,以及用更好的答案更快地繪製。 – meklarian 2009-11-17 19:36:12
我實施了第一個解決方案。耗時4秒。具有相同參數的第二種解決方案花費了2:40分鐘。表有三千萬行。 – Yada 2009-11-17 20:00:42
@Yada:我有另一個轉換!人們認爲它不會擴大 – gbn 2009-11-17 20:03:43