1
出於某種原因,我們有這樣的代碼(過程中),在SQL Server 2008 R2的:SQL事務和外部調用僵局
update foo set value = 'xxx' where id = 123
exec usp_analyzeFoo @id = 123
其中usp_analyzefoo召喚出連接到數據庫上的Web服務它自己並嘗試自行更新表foo
。該Web服務使用本地代碼,連接到硬件 (所以我不想讓這個代碼在SQL服務器內運行)等等,工作出來並更新foo
。但它是由不同的連接和當前事務之外的。
它一直工作,直到有人將這些調用包含在事務中,並且現在update
命令鎖定表foo
,並且Web服務(通過它自己的數據庫連接進行連接)被此事務阻塞並超時。
這是否有合理的解決方案?在當前事務結束後調用Web服務,在幾秒鐘後調度它(這不重要)或類似的東西?
首先明顯的問題 - 交易是否承諾? –
是的,但只有在所有這些完成後纔會完成(這從未發生過,因爲Web服務被打開的事務阻塞) – Axarydax
您可以調用SQL Server代理'作業',它將異步調用Web服務(然後運行即使事務最終回滾)。 –