BizTalk Server 2006 專案使用 SQL Adapter 呼叫預存程序,發生:「分散式交易已完成。請將此會話登記到新交易或 NULL 交易中」。環境:Win Server 2003 Ent + SP2、SQL Server 2005 Ent + SP2、BizTalk 2006 Ent,跨伺服器非網域部署,MSDTC 設「不要求驗證」。
狀態 1:建立本地交易時;狀態 2:嘗試登記繫結會話時。
BizTalk Orchestration 設「長期交易」,呼叫 SQL Adapter 的範圍設「自動交易」。預存程序內部又用 BEGIN TRAN 開啟本地交易,形成巢狀交易。Deadlock 導致全部回滾,觸發 8525。
TRY...CATCH 結構:BEGIN TRY
BEGIN TRANSACTION;
-- 更新語句
COMMIT TRANSACTION;
SET @ReturnValue = '01';
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION;
END CATCH
FOR XML AUTO, ELEMENTS 回傳狀態。單筆資料處理正常,併發仍有死鎖回滾,需進一步優化 SQL 邏輯。