我有一个使用 MERGE
的存储过程同步命令 dbo.tableA
与 [mylinkedserver].dbo.TableA
.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 服务器,带有 Service Pack 2 的 SQL Server 2008。
为什么触发器会导致此错误?!?!??
最佳答案
使用 Merge 实现触发器有点棘手。它归结为“对于在合并语句中指定的每个操作都必须有一个触发器”。
TechNet 说:“如果目标表上为 MERGE 语句执行的插入、更新或删除操作定义了一个启用的 INSTEAD OF 触发器,那么它必须为 MERGE 语句中指定的所有操作启用一个 INSTEAD OF 触发器.”
http://technet.microsoft.com/en-us/library/bb510625.aspx
关于sql-server - SQL Server 2008 : MERGE command on a table that has a trigger causes an error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5997946/