Sql server 使用Nullable Int缩短SQL Server存储过程
我有一个SQL Server存储过程,它执行如下命令:Sql server 使用Nullable Int缩短SQL Server存储过程,sql-server,tsql,Sql Server,Tsql,我有一个SQL Server存储过程,它执行如下命令: SELECT TOP(25) col_charname, col_axexp FROM tbl_characters WHERE GETUTCDATE() < DATEADD(DAY, 30, col_lastlogin) ORDER BY col_axexp DESC 但是,如果@par_activity为null(或者我们可以使用一些任意的固定值),我希望忽略额外的限制(我希望它
SELECT TOP(25)
col_charname, col_axexp
FROM
tbl_characters
WHERE
GETUTCDATE() < DATEADD(DAY, 30, col_lastlogin)
ORDER BY
col_axexp DESC
但是,如果@par_activity
为null(或者我们可以使用一些任意的固定值),我希望忽略额外的限制(我希望它像第一条语句一样工作)
我知道我可以使用T-SQLIF
子句将两个语句放在同一个过程中,但是SP中已经有很多这样的语句,我担心这个存储过程会变得越来越大
有什么方法可以使这项工作成功吗?有很多方法可以做到这一点,例如:
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
选择顶部(25)
col_charname,col_axexp
从…起
tbl_字符
哪里
GETUTCDATE()
或
选择顶部(25)
col_charname,col_axexp
从…起
tbl_字符
哪里
GETUTCDATE()
但是,您应该知道,这些查询的执行计划可能不如仅针对col\u-activate=@par\u-activate
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