我有一个存储过程,它使用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触发器“.