sql-server – SQL Server 2008:具有触发器的表上的MERGE命令会导致错误

我有一个存储过程,它使用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触发器实现有点棘手.它归结为“对于在merge语句中指定的每个动作,必须有一个触发器”.

TechNet说“如果目标表上为MERGE语句执行的插入,更新或删除操作定义了启用的INSTEAD OF触发器,那么它必须为MERGE语句中指定的所有操作启用INSTEAD OF触发器“.

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

点赞