鏈接服務器"(null)"的 OLE DB 訪問接口 "SQLNCLI10" 返回了消息 "Cannot start more transactions on this session."


開發同事反饋一個SQL Server存儲過程執行的時候,報鏈接服務器"(null)"的 OLE DB 訪問接口 "SQLNCLI10" 返回了消息 "Cannot start more transactions on this session."。這個存儲過程,個人做了一個精簡和脫敏處理后如下:

 

BEGIN TRY
    BEGIN TRANSACTION    
                    
    INSERT INTO OPENDATASOURCE('SQLOLEDB', 'DATA SOURCE=XXX.XXX.XX.XXX;USER ID=XXX;PASSWORD=XXX).XXX.DBO.XXX 
    (........)
    SELECT ..... FROM .....
    COMMIT TRANSACTION
END TRY
BEGIN CATCH
      IF @@TRANCOUNT>0
        ROLLBACK
         .........
END CATCH

 

clip_image001

 

對於這種問題,是因為:對於大多數 OLE DB 訪問接口(包括 SQL Server),必須將隱式或顯示事務中的數據修改語句中的 XACT_ABORT 設置為 ON。 唯一不需要該選項的情況是在提供程序支持嵌套事務時。具體參考官方文檔:

 

XACT_ABORT must be set ON for data modification statements in an implicit or explicit transaction against most OLE DB providers, including SQL Server. The only case where this option is not required is if the provider supports nested transactions."

 

在存儲過程里面的BEGIN TRANSACTION前設置SET XACT_ABORT ON;后問題即可解決。

 

 

 

參考資料:

 

https://docs.microsoft.com/zh-cn/sql/t-sql/statements/set-xact-abort-transact-sql?view=sql-server-2017


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 無法獲取鏈接服務器 "XXX" 的 OLE DB 訪問接口 "SQLNCLI10" 的架構行集 "DBSCHEMA_TABLES_INFO"。該訪問接口支持該接口,但使用該接口時返回了失敗代碼。 SqlServer鏈接服務器中報錯:鏈接服務器"test"的 OLE DB 訪問接口 "SQLNCLI11" 返回了消息 "無法完成延遲准備。"。 鏈接服務器"(null)"的 OLE DB 訪問接口 "Microsoft.Jet.OLEDB.4.0" 返回了消息 "未指定的錯誤"。 無法啟動鏈接服務器"XXX DB Link"的 OLE DB 訪問接口 "SQLNCLI11" 的嵌套事務。由於 XACT_ABORT 選項已設置為 OFF,因此必須使用嵌套事務。鏈接服務器"XXX DB Link"的 OLE DB 訪問接口 "SQLNCLI11" 返回了消息"無法在此會話中啟動更多的事務"。 無法執行該操作,因為鏈接服務器 "XXX" 的 OLE DB 訪問接口 "SQLNCLI10" 無法啟動分布式事務。 鏈接服務器 OLE DB 訪問接口 'SQLNCLI10' 返回的數據與列 '[LINK_SCT1].[SCT].[dbo].[v_Employee_Company].empname' 所需的數據長度不匹配。所需的(最大)數據長度為 10,但返回的數據長度為 11。 導入導出數據庫數據,報錯,鏈接服務器"(null)"的 OLE DB 訪問接口 "Microsoft.Jet.OLEDB.4.0" 返回了消息 "未指定的錯誤"。 鏈接服務器"(null)"的 OLE DB 訪問接口 "Microsoft.Jet.OLEDB.4.0" 返回了消息 "未指定的錯誤"。[手稿] 沒有活動事務 鏈接服務器的 OLE DB 訪問接口 "SQLNCLI" 無法啟動分布式事務 無法執行該操作,因為鏈接服務器 "xxxxx" 的 OLE DB 訪問接口 "SQLNCLI" 無法啟動分布式事務
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM