我在連接到 Azure SQL 資料倉庫的 SQL Server 上創建了一個鏈接服務器。
EXEC master.dbo.sp_addlinkedserver @server = N'LinkedserverTest', @srvproduct=N'', @provider=N'SQLNCLI', @datasrc=N'AZserver.database.windows.net', @catalog=N'AEDW'
/* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'LinkedserverTest', @useself=N'False', @locallogin=NULL, @rmtuser=N'SQLACcount', @rmtpassword='########'
GO
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', @optname=N'collation compatible', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', @optname=N'data access', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', @optname=N'dist', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', @optname=N'pub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', @optname=N'rpc', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', @optname=N'rpc out', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', @optname=N'sub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', @optname=N'connect timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', @optname=N'collation name', @optvalue=null
GO
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', @optname=N'lazy schema validation', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', @optname=N'query timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', @optname=N'use remote collation', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', @optname=N'remote proc transaction promotion', @optvalue=N'true'
GO
當我如下通過 SSMS 執行 SQL DW 的存盤程序時,它按預期執行。
EXEC Linkedservername,Databasename.dbo.spname
但是當我嘗試將該存盤程序作為觸發器定義的一部分執行時
CREATE TRIGGER [TriggerTest]
ON [dbo].[TriggerTest]
AFTER INSERT
AS
BEGIN
EXEC LSName.databasenm.dbo.SPname
END
當我嘗試將記錄插入表中時,出現以下錯誤:
訊息 596,級別 21,狀態 1,第 18 行
無法繼續執行,因為會話處于終止狀態。訊息 46710,級別 20,狀態 1,第 19 行
遇到不支持的事務管理器請求 0。SQL Server 并行資料倉庫 TDS 端點僅支持“開始/提交/回滾”的本地事務請求。
那么我是否遺漏了任何東西,或者無法通過觸發器定義觸發跨資料庫存盤程序
**Update :**The above issue was resolved based on suggestion provided by David.
Now I am in another issue :(
I will give you a context of what I am trying to accomplish :
I have a database server hosted in IaaS which also includes an MDS(Master data services) database along with normal one.
My intention is, whenever someone publishes a new data in an MDS table, an SP should be triggered in Azure SQL datawarehouse.
So I went with the below approach:
- Create a linked server between IaaS SQL and Azure SQL DW
- Create a trigger
I initially created a dummy trigger in a normal database in that server and tested out the linked server property change which you suggested and that worked as expected when I tried to insert a record into a table.
但是當我遵循在 MDS 后端表上創建觸發器的相同程序時,以及當我嘗試通過 UI 資源管理器插入新記錄時;我收到錯誤訊息:

并且無法添加任何記錄。
注意:我可以更新 UI 中的現有記錄,但不能添加新記錄,因為我在 Just Insert 而不是 Update 上創建了觸發器。
那么還有其他我需要更改的屬性嗎?
注意:已在 MDS 資料庫上啟用 Is_trustworthy_On 屬性
uj5u.com熱心網友回復:
就像錯誤所說的那樣,您不能在觸發器的事務中登記遠程 proc 執行。所以試試
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest',
@optname=N'remote proc transaction promotion',
@optvalue=N'false'
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/422529.html
標籤:
