2011-05-13 54 views
4

我有一個存儲過程,它使用MERGE命令將dbo.tableA[mylinkedserver].dbo.TableA同步。SQL Server 2008:具有觸發器的表上的MERGE命令導致錯誤

TableA有一個與之關聯的插入/更新觸發器。爲了讓事情變得非常簡單所有的觸發作用是

print 'I am a simple trigger because i dont want to cause errors' 

當執行SP(直通一個.NET Windows應用程序),它拋出這個錯誤:

OLE DB provider "SQLNCLI10" for linked server "MyLinkedServer" returned message "No transaction is active."

如果我刪除了觸發和執行存儲過程再次,它執行絕對好。

存儲過程也運行良好(與觸發器),如果我通過SSMS運行它。

MSDTC在兩臺服務器上都啓用。

服務器是Windows 2008服務器,SQL Server 2008中使用Service Pack 2

爲什麼會觸發導致此錯誤?!?!?

+0

可能的解決方法:http://stackoverflow.com/questions/4869977/sql-server-2008-merge-statement-how-to-disable-instead-of-insert-trigger-to-al – Hubbitus 2013-09-11 15:00:07

回答

1

合併的觸發器實現有點棘手。歸結爲「對於合併語句中指定的每個操作,都必須有觸發器」。

TechNet說:「如果目標表具有爲MERGE語句執行的插入,更新或刪除操作定義的已啓用INSTEAD OF觸發器,則它必須具有已啓用的INSTEAD OF觸發器,用於指定的所有操作在MERGE聲明中。「

http://technet.microsoft.com/en-us/library/bb510625.aspx

+0

我爲插入,更新,刪除做了3個單獨的觸發器(因爲這些是由MERGE命令執行的操作)。所有簡單的打印語句。仍然沒有運氣。觸發器中沒有INSTEAD OF。 – trainer 2011-05-17 14:41:19

+0

我也嘗試過只插入一個觸發器。仍然沒有運氣。 – trainer 2011-05-17 14:42:50

+0

這是否意味着你刪除了所有鏈接的服務器的東西,而只是一個合併語句與表上的觸發器導致錯誤?錯誤消息是否更改? – DavidEdwards 2011-05-17 19:19:40