Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用Nullable Int缩短SQL Server存储过程_Sql Server_Tsql - Fatal编程技术网

Sql server 使用Nullable Int缩短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(或者我们可以使用一些任意的固定值),我希望忽略额外的限制(我希望它

我有一个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(或者我们可以使用一些任意的固定值),我希望忽略额外的限制(我希望它像第一条语句一样工作)

我知道我可以使用T-SQL
IF
子句将两个语句放在同一个过程中,但是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