【发布时间】:2016-06-15 23:02:22
【问题描述】:
我有一种情况,我需要在事务内的存储过程 (sp_update_queue) 中包装更新 T-SQL。但是我想知道如果您有两个线程使用相同的连接但执行不同的查询并且一个回滚它启动的事务会发生什么。
例如 ThreadA 调用 sp_update_queue 来更新表 QUEUED_TASKS 但在 sp_update_queue 提交/回滚之前,事务 ThreadB 执行其他一些更新或在不同的表上插入 SQL,例如 CUSTOMERS。然后 ThreadB 完成后,sp_update_queue 恰好遇到错误并调用回滚。
因为它们都使用相同的连接,所以回滚是否也会回滚 ThreadB 所做的更改?无论 ThreadB 是否在事务中进行了更改。
【问题讨论】:
-
旁注:您应该不为您的存储过程使用
sp_前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好直接避免sp_并使用其他东西作为前缀 - 或者根本不使用前缀! -
select @@spid来自每个“线程”。 -
你能解释一下你说“......他们都使用相同的连接......”是什么意思吗?
标签: sql-server tsql concurrency transactions