T-SQL 和 SSRS 多参数

T-SQL and SSRS multi parameter

我有一个关于从 SSRS 多值参数查询 SQL 的问题。 我的多值参数基本上是空的,取决于用户输入的值,所以它默认为空:

我尝试进行 SQL 查询,如果没有为 SSRS 参数提供值,则查询所有数据,如果提供,则仅查询参数的数据。

我尝试了这些并且 none 目前有效:

  1. SerialNumber IN (IIF(@SNList='', SerialNumber, @SNList)
  2. SerialNumber IN (IIF(@SNList IS NULL, SerialNumber, @SNList)
  3. SerialNumber IN (@SNList)

#1 按我想要的方式工作 return 如果参数为空 & 如果只为参数输入一个值但 return 一个如果我输入超过 1 个值时出错(好吧,因为当有超过 1 个值时,我们不能使用“=”)

#2 如果没有为参数输入值,则不会 return 任何东西 & 如果只为参数输入一个值,但 return 出错如果我输入了 1 个以上的值。

#3 适用于 multi/single 值参数

有没有一种方法可以检查参数值的数量,或者是否有其他方法可以使它起作用?

Multi-select 参数不能为 null,要应用 multi-select 参数,SSRS 将转换您的查询,如果您尝试检查 TSQL.[=15 中的变量,该查询将会中断=]

可以做的是引入第二个 TSQL 参数,您根据是否应应用主参数来设置该参数。所以你的 multi-select 参数 @p1 是一个默认值为“All”的字符串,数据集查询类似于

if @p1IsNull = 1
begin
  select *
  from Sales.SalesOrderHeader
end
else
begin
  select *
  from Sales.SalesOrderHeader
  where SalesOrderId in (@p1)
end

@piIsNull 是用表达式设置的

形式

=iif( Parameters!p1.Value(0) = "All", 1, 0)

根据参数值,SQL 查询将如下所示:

exec sp_executesql N'if @p1IsNull = 1
begin
  select *
  from Sales.SalesOrderHeader
end
else
begin
  select *
  from Sales.SalesOrderHeader
  where SalesOrderId in (N''43660'',N''43667'')
end',N'@p1IsNull int',@p1IsNull=0

或者像这样

exec sp_executesql N'if @p1IsNull = 1
begin
  select *
  from Sales.SalesOrderHeader
end
else
begin
  select *
  from Sales.SalesOrderHeader
  where SalesOrderId in (@p1)
end',N'@p1IsNull int,@p1 nvarchar(3)',@p1IsNull=1,@p1=N'All'