C#SQL事务
我使用的C#类在可序列化事务中调用SQL存储过程 因此,如果存储过程中出现问题,所有内容都将回滚 我在SQL存储过程中有一条语句应该始终执行(即使存储过程在某个点失败并发生回滚)。该语句是记录的更新 我无法更改C#库,因此需要在存储过程中执行此操作 是否有某种方法可以在事务之外执行该语句?您可以使用。分布式事务中不支持它,必须先执行您的语句,因此您可能不需要它。我找到了解决方案。 我没有意识到SQL知道它是在事务事务中被c#类调用的 应该始终执行的update语句是过程中的第一步(也是最后一步)。让我澄清一下: 我有一个IF函数。如果是真的,则无论发生什么情况,都应该进行更新。如果为false,则应执行一些事务逻辑。 现在在c#类中,它希望从存储的过程中得到一个结果。如果proc没有返回结果(就像update语句中那样),它将回滚事务 因此,只要在update语句之后添加以下行,就会发生更新:)C#SQL事务,sql,sql-server,transactions,sql-server-2008-r2,Sql,Sql Server,Transactions,Sql Server 2008 R2,我使用的C#类在可序列化事务中调用SQL存储过程 因此,如果存储过程中出现问题,所有内容都将回滚 我在SQL存储过程中有一条语句应该始终执行(即使存储过程在某个点失败并发生回滚)。该语句是记录的更新 我无法更改C#库,因此需要在存储过程中执行此操作 是否有某种方法可以在事务之外执行该语句?您可以使用。分布式事务中不支持它,必须先执行您的语句,因此您可能不需要它。我找到了解决方案。 我没有意识到SQL知道它是在事务事务中被c#类调用的 应该始终执行的update语句是过程中的第一步(也是最后一步)
你的解决方案听起来不太好。。例如,如果您的存储过程将是更大事务的一部分,那么它将提交在此之前所做的所有更改。另外,我相信没有人会在没有看到代码的情况下猜到您的进程有这样的行为 总是需要执行proc的某些部分听起来像是需要进行安全审计。因此,也许您应该使用跟踪、扩展事件或SQLServer审计
如果您确实需要您所说的您所需要的-您可以使用此处描述的方法:那么您的sp中的trx之外有此特殊更新,但它不起作用?有代码吗?您好,没有,update语句在trx内部执行,但无论trx是否失败,它都应该始终执行。。
IF @@TRANCOUNT > 0
BEGIN
COMMIT TRANSACTION
END