我有一个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 :(得分: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