2013-07-20 50 views
0

我有執行這樣的命令的SQL Server存儲過程縮短SQL Server存儲過程:使用可空詮釋

SELECT TOP(25) 
    col_charname, col_axexp 
FROM 
    tbl_characters 
WHERE 
    GETUTCDATE() < DATEADD(DAY, 30, col_lastlogin) 
ORDER BY 
    col_axexp DESC 

而且我想,讓存儲過程來選擇指定其他限制的WHERE 。與參數@par_vocation進行整數比較。

SELECT TOP(25) 
    col_charname, col_axexp 
FROM 
    tbl_characters 
WHERE 
    GETUTCDATE() < DATEADD(DAY,30, col_lastlogin) 
    AND col_vocation = @par_vocation 
ORDER BY 
    col_axexp DESC 

但是,如果@par_vocation爲空(或者我們可以使用一些任意的固定值),我想忽略額外的限制(我希望它像第一個語句運行)。

我知道我可以使用T-SQL IF子句在同一個程序這兩個語句,但在SP有很多這些語句已經,我怕此存儲過程日益增長的大。

有沒有辦法讓這項工作?

回答

0

有很多方法可以做到這一點,例如:

SELECT TOP(25) 
    col_charname, col_axexp 
FROM 
    tbl_characters 
WHERE 
    GETUTCDATE() < DATEADD(DAY,30, col_lastlogin) 
    AND col_vocation = isnull(@par_vocation, col_vocation) 
ORDER BY 
    col_axexp DESC 

SELECT TOP(25) 
    col_charname, col_axexp 
FROM 
    tbl_characters 
WHERE 
    GETUTCDATE() < DATEADD(DAY,30, col_lastlogin) 
    AND (@par_vocation is null or col_vocation = @par_vocation) 
ORDER BY 
    col_axexp DESC 
但是

,你應該知道這些查詢的執行計劃,可以像只是col_vocation = @par_vocation並不好