我有一种情况需要在事务内的存储过程(sp_update_queue
)中包装更新T-SQL。但是我想知道如果你有两个线程使用相同的连接但是执行不同的查询并且回滚它开始的事务会发生什么。
例如,ThreadA调用sp_update_queue
来更新表QUEUED_TASKS
但在sp_update_queue
提交/回滚之前,事务ThreadB执行一些其他更新或在另一个表上插入SQL,比如{{1} }。然后在ThreadB完成后,CUSTOMERS
碰巧遇到错误并调用回滚。
因为它们都使用相同的连接,所以回滚也会回滚ThreadB?所做的更改,无论ThreadB是否在事务中进行了更改。
答案 0 :(得分:0)
首先获取资源的每个线程将锁定该资源(如果您有合适的隔离级别),因此第二个线程将等待所需的资源。
注意:每个线程都有自己的SessionId。
<强>已更新强>
在您的场景中,但是两个线程都使用相同的连接,但不使用任何公共资源(ThreadA正在处理表X而ThreadB正在处理表Y)。因此,每个线程(线程A或B)的提交或回滚不会影响另一个线程。