触发器中的SQL数据未通过:合作伙伴事务管理器已禁用其支持

时间:2015-11-17 12:36:48

标签: sql sql-server triggers

我在SQL Server上创建了一个After Insert Trigger。

USE [CSPFContactCenter]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[SendSMS_INSERT]
       ON [dbo].[tblSmsSend]
AFTER INSERT
AS
BEGIN

declare @Text nvarchar(max)
declare @MobileNumber nvarchar(max)

set @Text = (SELECT TOP 1 Text FROM tblSmsSend)
set @MobileNumber = (SELECT TOP 1 MobileNumber FROM tblSmsSend)

exec SqlStoredProcedure1 @Text, @MobileNumber

END

将在此触发器中执行的存储过程想要将新记录插入另一个服务器中的另一个数据库。

我可以运行触发器的主体并且它可以正常工作: (我的意思是这部分:)

declare @Text nvarchar(max)
declare @MobileNumber nvarchar(max)

set @Text = (SELECT TOP 1 Text FROM tblSmsSend)
set @MobileNumber = (SELECT TOP 1 MobileNumber FROM tblSmsSend)

exec SqlStoredProcedure1 @Text, @MobileNumber

但是当我在Trigger中使用它时,这个例外情况将会确定:

enter image description here

感谢您的帮助

编辑: 我已启用网络DTC访问,但没有任何更改

1 个答案:

答案 0 :(得分:1)

  

它只是插入一条记录,仅此而已。但是在另一个服务器数据库中

所以'没有更多'而不仅仅是分布式交易。正如消息中明确指出的那样,您的服务器明确禁止该服务器。

当您自己运行exec SqlStoredProcedure1时,您不会创建分布式事务,因为您没有启动本地事务。相比之下,当从触发器运行时,必须必须已注册到本地事务中,因此必须升级到分布式事务。

没有解决方案。要么与远程服务器的管理员交谈以允许分布式事务(我不会允许这样做),或者更好的是,设计一个不涉及远程服务器的解决方案。改为使用复制或服务代理。