我在使用环境事务的存储过程中使用了类型轮询。 PollingAvailable语句提供“所有”行计数。轮询语句仅给出有效行的子集,有时不给出。
在轮询过程中,我需要能够根据某些业务逻辑排除某些结果。有时,过程没有返回任何行,这导致WCF-SQL适配器对事务进行回滚。并且,轮询过程将一直循环直到至少返回一个有效行。
如果在此过程中以后发生某些事情,我想返回“有效”结果,因此我不希望禁用环境事务。
存储过程事务指令(用作我的“标准”):
SET XACT_ABORT ON;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
有任何解决方法的想法吗? 提交内部事务,我想还是会回滚吗?
答案 0 :(得分:1)
因此,“正确”的解决方案是根据轮询语句的预期输出,使PollingDataAvailableStatement返回正确的值0或> 0。
在某些情况下很重要,因为它并不总是很重要:),我在SP中添加了一个标志,以指示它是从PollingDataAvailableStatement调用的,因此SP可以通过某种逻辑来确定数据是否可用以及返回该信号。
当然,您可以使用单独的SP,但是出于维护的原因,我宁愿将逻辑放在一个地方。