相关疑难解决方法(0)

SSRS 报告调用的存储过程中的事务处理是什么?

考虑以下:

CREATE PROCEDURE dbo.usp_trantest AS
SELECT @@TRANCOUNT as trancount;
GO
Run Code Online (Sandbox Code Playgroud)

当我usp_trantest从 SSMS 中手动调用时,trancount 为 0。如果我运行包含查询相同存储过程的数据集的 SSRS 报告,则 trancount 记录为 1。

执行 SSRS 方法的 T-SQL 跟踪显示存储过程调用的跟踪事件,该事件与我从 SSMS 所做的相同。

是否有一些行为可以根据 SSRS 上下文而改变?比如,为动态 sql 调用或其他东西打开一个隐式事务,或者 SSRS 在 T-SQL 之外创建一个事务上下文?

编辑:

在某人(谢谢,陌生人!)的现已删除的答案中,建议 SSRS 报告的数据集可能已选中“处理查询时使用单个事务”。原来如此!

我做了一些进一步的测试,在未选中此设置的@@TRANCOUNT情况下,无论是在 SSMS 中运行还是从 SSRS 报告中运行都是一样的。

因此,我们似乎可以得出结论,此数据源设置确实会导致 SSRS 报告在运行查询之前在数据库上创建事务上下文。由于这个额外的事务没有出现在 T-SQL 跟踪中,我们可以假设它是使用 API 方法而不是 T-SQL 语句打开的。

stored-procedures ssrs t-sql transaction sql-server-2012

7
推荐指数
1
解决办法
2190
查看次数