【发布时间】:2020-08-28 08:03:26
【问题描述】:
我有一个迭代 CTE 并为每一行执行自定义 sp_executesql 查询的脚本。我需要在 SSRS 报告中使用结果表,但数据集似乎不允许声明、游标和执行语句。
有什么方法可以让 T-SQL 在 SSRS 中工作?
【问题讨论】:
-
您遇到什么错误?它应该可以工作。
标签: sql-server tsql reporting-services ssrs-2012
我有一个迭代 CTE 并为每一行执行自定义 sp_executesql 查询的脚本。我需要在 SSRS 报告中使用结果表,但数据集似乎不允许声明、游标和执行语句。
有什么方法可以让 T-SQL 在 SSRS 中工作?
【问题讨论】:
标签: sql-server tsql reporting-services ssrs-2012
是的,我几乎总是在我的数据集中使用整个脚本。只有查询设计器不支持它们。
只需在 SSMS 或其他任何内容中编写脚本,然后将其粘贴到查询编辑器中。请记住注释掉将从报告中作为参数传入的所有变量声明。
如果双击数据集名称并确保查询类型为文本,则可以直接将脚本复制进去。
注意事项:
请勿声明任何需要从报告中作为参数传入的变量。我通常只是在数据集查询中注释掉这些。 例如如果您从报告参数中传递员工 ID,那么您的数据集将不需要该声明,因此它看起来像这样
SELECT * FROM myTable WHERE EmpID = @EmpID
显然,当您在 SSMS 中测试脚本时,您需要此声明
确保对@Variables 的所有引用都用相同的大小写拼写。 SSRS 在变量名称方面区分大小写。
只有您的脚本输出的第一个结果集才会“看到”我的 SSRS,因此请确保您只有一个输出最终数据的 SELECT 语句。
【讨论】:
T-SQL 在 SSRS 数据集中运行良好。我经常声明变量,使用临时表和其他 T-SQL 语句,并且过去使用过 cursor 和 exec 语句。
问题可能在于您返回的内容。 “查询”(整个 SQL 语句)应该只返回一个应该具有稳定结构的表。例如,每次游标迭代返回一行是行不通的。将它们放在临时表中,然后在游标执行后立即全部返回。您也不能为不同的执行返回不同的列类型或名称。
另外,不要声明用作参数的变量。
【讨论】: