【问题标题】:Can you use T-SQL statements in an SSRS dataset?您可以在 SSRS 数据集中使用 T-SQL 语句吗?
【发布时间】:2020-08-28 08:03:26
【问题描述】:

我有一个迭代 CTE 并为每一行执行自定义 sp_executesql 查询的脚本。我需要在 SSRS 报告中使用结果表,但数据集似乎不允许声明、游标和执行语句。

有什么方法可以让 T-SQL 在 SSRS 中工作?

【问题讨论】:

  • 您遇到什么错误?它应该可以工作。

标签: sql-server tsql reporting-services ssrs-2012


【解决方案1】:

是的,我几乎总是在我的数据集中使用整个脚本。只有查询设计器不支持它们。

只需在 SSMS 或其他任何内容中编写脚本,然后将其粘贴到查询编辑器中。请记住注释掉将从报告中作为参数传入的所有变量声明。

如果双击数据集名称并确保查询类型为文本,则可以直接将脚本复制进去。

注意事项

  1. 请勿声明任何需要从报告中作为参数传入的变量。我通常只是在数据集查询中注释掉这些。 例如如果您从报告参数中传递员工 ID,那么您的数据集将不需要该声明,因此它看起来像这样

    SELECT * FROM myTable WHERE EmpID = @EmpID

显然,当您在 SSMS 中测试脚本时,您需要此声明

  1. 确保对@Variables 的所有引用都用相同的大小写拼写。 SSRS 在变量名称方面区分大小写。

  2. 只有您的脚本输出的第一个结果集才会“看到”我的 SSRS,因此请确保您只有一个输出最终数据的 SELECT 语句。

【讨论】:

    【解决方案2】:

    T-SQL 在 SSRS 数据集中运行良好。我经常声明变量,使用临时表和其他 T-SQL 语句,并且过去使用过 cursor 和 exec 语句。

    问题可能在于您返回的内容。 “查询”(整个 SQL 语句)应该只返回一个应该具有稳定结构的表。例如,每次游标迭代返回一行是行不通的。将它们放在临时表中,然后在游标执行后立即全部返回。您也不能为不同的执行返回不同的列类型或名称。

    另外,不要声明用作参数的变量。

    【讨论】:

    • 我的脚本声明了一堆变量,创建了一个临时表,遍历游标,为每一行插入一个查询结果到临时表中,然后显示该表并删除它。
    猜你喜欢
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多