適用於: SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics
Analytics Platform System (PDW)
重要
SQL Server Native Client (SNAC) 未隨附:
- SQL Server 2022 (16.x) 及更新版本
- SQL Server Management Studio 19 與更新版本
不建議使用 SQL Server Native Client (SQLNCLI 或 SQLNCLI11) 和舊版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB) 進行新的應用開發。
針對新專案,請使用下列其中一個驅動程式:
針對 SQL Server 資料庫引擎 (2012 到 2019 版) 的隨附元件 SQLNCLI,請參閱支援生命週期例外狀況。
您可以透過不同的方式,為不同的Microsoft SQL 系統建立分散式交易。
ODBC 驅動程式會呼叫 MSDTC for SQL Server 內部部署
Microsoft分散式交易協調器 (MSDTC) 可讓應用程式將交易擴充或 散發 到兩個或多個 SQL Server 實例。 即使兩個實例裝載於不同的計算機上,分散式交易仍可運作。
MSDTC 是針對內部部署MICROSOFT SQL Server 安裝,但不適用於Microsoft的 Azure SQL 資料庫 雲端服務。
當您C++程式管理分散式交易時,SQL Server Native Client 驅動程式會呼叫 MSDTC for Open Database Connectivity (ODBC)。 Native Client ODBC 驅動程式具有符合 Open Group Distributed Transaction Processing (DTP) XA 標準的交易管理員。 MSDTC 需要此合規性。 一般而言,所有交易管理命令都會透過這個 Native Client ODBC 驅動程式傳送。 順序如下:
您的C++ Native Client ODBC 應用程式會藉由呼叫 SQLSetConnectAttr 來啟動交易,並關閉自動認可模式。
應用程式會更新電腦 A 上 SQL Server X 上的一些數據。
應用程式會更新電腦 B 上 SQL Server Y 上的一些數據。
- 如果 SQL Server Y 上的更新失敗,則會復原這兩個 SQL Server 實例上所有未認可的更新。
最後,應用程式會藉由呼叫 SQLEndTran (1)結束交易,並使用 SQL_COMMIT 或 SQL_ROLLBACK 選項。
(1) MSDTC 可以在沒有 ODBC 的情況下叫用。 在這種情況下,MSDTC 會變成交易管理員,而且應用程式不再使用 SQLEndTran。
只有一個分散式交易
假設您的 C++ Native Client ODBC 應用程式已登記在分散式交易中。 接下來,應用程式會在第二個分散式交易中登記。 在此情況下,SQL Server Native Client ODBC 驅動程式會離開原始分散式交易,並在新的分散式交易中登記。
如需詳細資訊,請參閱 DTC 程式設計人員參考。
雲端中 SQL 資料庫 的 C# 替代方案
Azure SQL 資料庫 或 Azure Synapse Analytics 不支援 MSDTC。
不過,讓 C# 程式使用 .NET 類別 System.Transactions.TransactionScope,即可為 SQL 資料庫 建立分散式交易。
其他程式設計語言
下列其他程式設計語言可能無法針對具有 SQL 資料庫 服務的分散式交易提供任何支援:
- 使用 ODBC 驅動程式的原生C++
- 使用 Transact-SQL 的連結伺服器
- JDBC 驅動程式