我有一種情況需要在事務內的存儲過程(sp_update_queue
)中包裝更新T-SQL。但是我想知道如果你有兩個線程使用同一個連接但是執行不同的查詢並且一個回退它開始的事務會發生什麼。T-SQL存儲過程事務併發性
例如ThreadA中稱爲sp_update_queue
更新表QUEUED_TASKS
但sp_update_queue
提交/回滾之前,交易ThreadB執行一些其他的更新或插入SQL在不同的表,說CUSTOMERS
。然後在ThreadB完成後,sp_update_queue
碰巧遇到錯誤並調用回滾。
由於它們都使用相同的連接,回滾也會回滾由ThreadB?所做的更改,無論ThreadB是否在事務中進行更改。
旁註:你應該** **不使用'sp_'前綴爲您的存儲過程。微軟已經保留了這個前綴以供自己使用(參見*命名存儲過程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你將來有可能冒着名字衝突的風險。 [這對你的存儲過程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是簡單地避免使用'sp_'並將其他內容用作前綴 - 或者根本沒有前綴! –
'select @@ spid' from each「thread」。 –
當你說「......他們都使用同一個連接......」時,你能澄清一下你的意思嗎? –