2011-06-28 58 views
3

我在MS SQL中,需要2個parameteres,例如
SQL Server的條件取決於輸入參數選擇

CREATE PROCEDURE MyProcedure 
    @A  INT, 
    @B  INT 
AS 
BEGIN 
    SELECT ... 

    FROM ... 

    WHERE [A] = @A AND [B] = @B 

END 

我的問題是一個存儲過程。如果我有@B = 0我想在選擇這樣的行,其中[A] = @ A,wthout [B] = @ B ..我怎麼才能達到這與最低代碼?非常感謝

回答

4

嘗試以下操作:

SELECT ...  
FROM ...  
WHERE [A] = @A AND 
     (@B = 0 OR [B] = @B) 
+0

完美,謝謝 – Grace

+0

@格雷斯:歡迎... –

0

這是一個醜陋的解決方案,但簡單:

If @B = 0 begin 
    ...your sql query without the B = @B 
end 
else if @B <> 0 begin 
    ... your sql query with the B = @B 
end 
1
WHERE 
    [A] = @A AND [B] = ISNULL(NULLIF(@B, 0), B) 
1

你可能會想嘗試這樣的事:

CREATE PROCEDURE MyProcedure 
    @A  INT, 
    @B  INT 
AS 
BEGIN 
    DECLARE @sql varchar(max) 
    DECLARE @whereStat varchar(max) 
    IF @B = 0 
     SET @whereStat = 'WHERE [A] = ' + @A 
    ELSE 
     SET @whereStat = 'WHERE [A] = ' + @A + 'AND [B] = '+ @B 

    SET @sql = 'SELECT ... 

    FROM ... '+ @whereStat 
    exec sp_execsql @sql 

END 

基本上你動態創建爲ql字符串並通過系統存儲過程執行。這可能不是最好的方式/最快的方式,但它是另一種選擇。 :)

+0

我認爲只有這完全回答原來的問題。有了這個,你可以真正排除你在where子句中不需要的參數。 – FrenkyB