sql-server - SQL Server 2008 : MERGE command on a table that has a trigger causes an error

标签 sql-server merge windows-server-2008

我有一个使用 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/

相关文章:

c# - 导出到 excel - Windows Server 2008 IIS7 上的问题

sql-server - 恢复数据库用户登录错误

sql-server - 如何获取Azure SQL Server的连接数?

sql - 在T-SQL中,如何在子查询中引用表变量?

git - 检查 pull 请求是否与目标分支保持同步

git - 为什么默认情况下git在 merge 后提交?

sql-server - SSIS 2008 - 如何将日期和时间字段添加在一起

c++ - 如何通过键有效地合并 k 个排序的成对键/值 vector ?

PowerShell 脚本将文件夹上移一级并删除先前包含的文件夹

.NET 在 Server 2008 中永久缓存 DNS