我有一个在CTE上迭代的脚本,并为每一行执行一个自定义的sp_executesql查询。我需要在SSRS报表中使用结果表,但数据集似乎不允许使用声明、游标和执行语句。
有什么方法可以让T-SQL在SSRS中工作?
是的,我几乎总是在我的数据集中使用整个脚本。只是查询设计器不支持它们。
简单地用SSMS或其他什么东西写你的脚本,然后把它粘贴到查询编辑器中。记住要注释掉任何将从报表中作为参数传入的变量声明。
如果你双击数据集名称,并确保查询类型是文本,那么你可以直接复制脚本。
注释:
不要声明任何需要从你的报表中传入的变量作为参数。例如,如果你从报告中传递了一个雇员ID作为参数,那么你的数据集就不需要声明,所以它看起来会像这样。
SELECT * FROM myTable WHERE EmpID = @EmpID。
当然,当你在SSMS中测试脚本时,你会需要这样的声明。
确保所有对@Variables的引用都使用相同的大小写。当涉及到变量名时,SSRS是区分大小写的。
只有你的脚本输出的第一个结果集才会被我的SSRS "看到",所以确保你只有一个SELECT语句输出最终数据。
T-SQL在SSRS数据集中工作得很好。我经常声明变量,使用临时表和其他T-SQL语句,并在过去使用游标和exec语句。
问题可能出在你返回的内容上。查询"(整个SQL语句)应该只返回一个表,这个表应该有一个稳定的结构。例如,每一次游标的迭代返回一条记录是行不通的。把它们放在一个临时表中,然后在游标执行后一次性全部返回。你也不能为不同的执行返回不同的列类型或名称。
另外,不要声明你用作参数的变量。