T-SQL 和 SSRS 多参数
T-SQL and SSRS multi parameter
我有一个关于从 SSRS 多值参数查询 SQL 的问题。
我的多值参数基本上是空的,取决于用户输入的值,所以它默认为空:
我尝试进行 SQL 查询,如果没有为 SSRS 参数提供值,则查询所有数据,如果提供,则仅查询参数的数据。
我尝试了这些并且 none 目前有效:
SerialNumber IN (IIF(@SNList='', SerialNumber, @SNList)
SerialNumber IN (IIF(@SNList IS NULL, SerialNumber, @SNList)
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'
我有一个关于从 SSRS 多值参数查询 SQL 的问题。 我的多值参数基本上是空的,取决于用户输入的值,所以它默认为空:
我尝试进行 SQL 查询,如果没有为 SSRS 参数提供值,则查询所有数据,如果提供,则仅查询参数的数据。
我尝试了这些并且 none 目前有效:
SerialNumber IN (IIF(@SNList='', SerialNumber, @SNList)
SerialNumber IN (IIF(@SNList IS NULL, SerialNumber, @SNList)
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'