sql-server-2008 - 将变量设置为 IN 语句的字符串列表

标签 sql-server-2008 t-sql ssrs-2008

我可以在不使用动态 SQL 的情况下将字符串列表分配给变量以在 IN 语句中使用吗?

我正在 SSRS 中开发一个报告,它允许用户选择三个可能值之一作为参数,而参数又将与该选择相关的值分配给 IN 语句。有些参数具有单个关联值,有些则具有多个关联值。

情况 1 和 2 可以正常运行,但情况 3 不能正常运行,因为它是作为标量值而不是列表传递的。我尝试了各种方法来转义每个项目周围的引号,但它不起作用。

declare @items as varchar(50)
set @items =
  CASE @parameter
    WHEN 1 then 'first'
    WHEN 2 then 'second'
    WHEN 3 then 'third, fourth'
  END

select column1
from table1
where column1 IN (@items)

最佳答案

不,你不能。您可以通过以下方式使用表变量:

DECLARE @table TABLE(item varchar(50))

IF @parameter = 3
BEGIN 
   INSERT INTO @table(item) VALUES ('third'), ('fourth')
END
ELSE
 BEGIN
   INSERT INTO @table VALUES(
     CASE @parameter      
        WHEN 1 then 'first'
       WHEN 2 then 'second'
     END 
    )
 END

-- And use IN(subquery)
SELECT column1     
FROM table1     
WHERE column1 IN (SELECT item FROM @table) 

您还可以使用 EXISTS,它在此类条件检查中速度更快,但由于小项目问题 (1-2),您不会获得显着的性能改进

SELECT column1     
FROM table1 t
WHERE EXISTS (SELECT * FROM @table WHERE item = t.column1) 

关于sql-server-2008 - 将变量设置为 IN 语句的字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8009704/

相关文章:

sql-server - 即席只读查询是否存储在 SQL Server 事务日志中?

sql-server - T-SQL - 在 where 和子句中使用参数

reporting-services - SSRS : Relative URL Hyperlink

java - 此类语句不支持使用executeUpdate(String)方法

c# - MD5 哈希值前缀为 '0x'

sql-server-2008 - 从 varchar 字段中删除单个字符 SQL Server 2008

sql - 存储过程中一列上的两个可选参数

sql - 如何使用 T-SQL 提取数据库架构?

ssrs-2008 - 隐藏重复行 SSRS 2008 R2

xml - 如何防止 XML 数据的 SSRS 查询总是返回空行?