如果没有返回数据,如何防止 WCF-SQL 适配器回滚事务

How to prevent WCF-SQL adapter to roll back transaction if no data is returned

我在使用环境事务的存储过程中使用类型轮询。 PollingAvailable 语句给出 "all" 行计数。轮询语句只给出有效行的一个子集,有时 none.

在轮询过程中,我需要能够根据某些业务逻辑排除某些结果。有时过程中没有 returned 行,这会导致 WCF-SQL 适配器对事务进行回滚。并且,轮询过程会循环进行,直到至少有一个有效行被 returned.

我不想禁用环境事务,因为 "valid" 结果我想 return,如果在此过程中稍后发生某些事情。

存储过程事务指令(用作我的"standard"):

SET XACT_ABORT ON;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

有什么解决方法吗? 提交内部事务我想无论如何都会被回滚?

因此,'correct' 解决方案是将 PollingDataAvailableStatement 制作成 return 正确的值 0 或 >0,具体取决于轮询语句的预期输出。

我在某些情况下很重要,因为它并不总是很重要 :),我已经向 SP 添加了一个标志以指示它是从 PollingDataAvailableStatement 调用的,因此 SP 可以使用一些逻辑来确定数据是否是可用并且 return 该信号。

当然,您可以使用单独的 SP,但出于维护原因,我更愿意将逻辑保留在一个地方。