繁体   English   中英

多个WHERE子句输入到T-SQL存储过程

[英]Multiple WHERE clause inputs to T-SQL stored procedure

我在网络表单上有一个多选列表框,列出了各种内部活动代码,用户可以根据所选代码过滤查询结果。 我可以轻松地将单个代码作为参数添加到我的存储过程中,并使用WHERE子句过滤结果,如下所示:

WHERE ActivityCode = @ActivityCode OR @ActivityCode is null 

但处理多个代码的最佳做法是什么,特别是当所选代码的数量是任意的时?

where isnull(@ActivityCode, ActivityCode) = ActivityCode 

您可以使用WHERE ActivityCode IN (@Code1, @Code2) OR ActivityCode IS NULL

这个:

WHERE ActivityCode = @ActivityCode OR @ActivityCode is null 

......工作,但不是可以

如果您只有一个可选参数,则可以使用IF:

IF @ActivityCode IS NOT NULL
BEGIN

  SELECT ...
    FROM ...
   WHERE ActivityCode = @ActivityCode

END
ELSE
BEGIN

  SELECT ...
    FROM ...

END

仅供参考: SQL不支持表示逗号分隔列表的变量 - 您必须使用动态SQL

SQL Server 2005+

DECLARE @SQL NVARCHAR(MAX)
    SET @SQL = N'SELECT ...
                   FROM ... 
                  WHERE 1 = 1 '

    SET @SQL = @SQL + CASE 
                         WHEN @ActivityCode IS NOT NULL THEN ' AND ActivityCode IN (@ActivityCode) '
                         ELSE ' '
                      END

BEGIN

  EXEC sp_executesql @SQL, N'@ActivityCode VARCHAR(100)', @ActivityCode

END

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM