存储过程更新

时间:2015-08-17 15:33:49

标签: sql-server stored-procedures reporting-services

首先让我在BIDS 2008中描述我的报告项目:

  • 一个利用SQL凭据的数据源,链接到SQL Server 2008 R2数据库
  • 一组共享数据集,从数据库中的各种存储过程中获取数据;大多数都有参数,有些没有。
  • 一组报告​​,其中嵌入了从共享数据集中派生数据的数据集。

此外,我在报表服务器上启用了远程错误。

在Reports Server上,此设置在过去3年中运行良好,直到我需要重新编写存储过程,该数据存储过程需要很长时间才能运行的报告总是超时。修订后的存储过程现在运行35秒。相比之前的18分钟。程序的输出没有改变;相同数量的列具有相同的数据类型。

执行报告时我注意到以下行为。它在BIDS中运行时没有问题但是一旦部署,运行报告就会产生以下错误:

  

报告处理期间发生错误。 (rsProcessingAborted)   共享数据集'Recon_Rw_1'的执行失败。 (rsDataSetExecutionError)   数据集''的查询执行失败。 (rsErrorExecutingCommand)   数据库中已经有一个名为“PK_unit_open_status”的对象。无法创建约束。查看以前的错误。

确认 - 修订过程包含包含各种索引的临时表。我在程序执行期间监视了(在tempdb上)创建的临时表,并确认在程序终止后删除了所有表 - 实际上我还在程序结束时包含了一个部分来删除所有创建的临时表。

该报告包含2个嵌入数据集,用于过滤共享数据集中的数据。上述错误中引用的数据集是嵌入的数据集之一。有时会更改错误消息以引用其他嵌入数据集。

这是我难倒的地方 - 在报表服务器上导致此行为的原因是什么?回想一下,我没有修改共享或嵌入数据集,数据源仍然像以前一样。所有其他报告都没有问题。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

以下是我为解决这个问题所采取的措施 - 我在程序声明后添加了“START TRANSACTION”,最后添加了“COMMIT TRANSACTION”。我不确定这是否有任何性能缺陷或带来任何风险。欢迎提供这方面的任何反馈。