如何在期望使用标量时使用表值调用存储过程



所以我不是一个SSRS专家,但我从一个更擅长SQL的人那里继承了这个SSRS报告。基本上,在SSRS中,报表的顶部有参数,您可以在这个字符串值表中选择一个、几个或所有选项。

我试图手动执行SP,但它期望标量值在SSRS前端不是标量。必须有一些方法来把这些打包起来,而不是一个接一个地将单个选择的每种可能的组合。

如果需要的话,我会贴出一些代码,但是我认为这是非常直接的。

•SSRS前端有报表参数选项

•此报告的SP一次只期望一个值

编辑:SP是这样处理其中一个变量的:

DECLARE @IBA_list TABLE (IBA VARCHAR(20))
INSERT @IBA_list (IBA) SELECT DISTINCT * from  dbo.splitstring(@IBA)

但问题是,我必须SELECT * FROM IBA_table来获得这些值,这样,我就不能使用splitstring函数。

我试着传递值,我只是得到一个标量预期问题,这是完全有意义的。

通常,如果您有一个多值参数,那么数据集查询中的SQL语句可能包含一个使用IN的where子句。例如

SELECT * FROM Employees WHERE Department IN (@dept)

如果用户选择,则输入"accounts"one_answers";sales"然后SSRS将其注入到语句中,如果在服务器上运行跟踪,就可以看到这一点。那么在服务器上实际执行的将是

SELECT * FROM Employees WHERE Department IN ('accounts', 'sales')

如果您运行跟踪,您将看到实际使用的查询以及参数是如何传递的,但最简单的近似将是类似于

的内容。
declare @paramValues varchar(100) = '''sales'',''accounts'''
declare @sql varchar(max)
set @sql = replace('SELECT * FROM Employees WHERE Department IN (@dept)', '@dept', @paramValues)
exec (@sql)

相关内容

最新更新