我有一个SQL Server 2008 RDS实例,我在本地计算机SQL Server 2014上创建了一个链接服务器(AWSMSSQL)。
现在我创建了一个从本地机器数据库表中插入,更新和删除的触发器
animate()
当我在本地数据库表上更新时,使用代码
USE [test]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[ms_test] ON [dbo].[localservertable]
FOR INSERT, UPDATE, DELETE
AS
BEGIN
declare @iddata int;
declare @option int;
select @iddata=i.[id] from inserted i;
select @option=i.[option] from inserted i;
IF NOT EXISTS(SELECT * FROM inserted)
BEGIN
select @option=d.[option] from deleted d;
DELETE FROM [AWSMSSQL].[test].[dbo].[localservertable] WHERE [option]=@option;
END
ELSE
BEGIN
IF NOT EXISTS(SELECT * FROM deleted)
BEGIN
INSERT INTO [AWSMSSQL].[test].[dbo].[localservertable] VALUES (@iddata,@option);
END
ELSE
BEGIN
UPDATE [AWSMSSQL].[test].[dbo].[localservertable] SET [option]=9 WHERE id=1;
END
END
END;
显示错误
UPDATE [dbo].[localservertable]
SET [option] = 5
WHERE [iddata]=1
我发现这个link告诉我如何修改MSDTC的设置。但是在更改之后我重启了AWS RDS SERVER和本地机器。但是会存在同样的错误。帮助我摆脱这个错误
谢谢!
答案 0 :(得分:1)
触发器隐式启用XACT_ABORT。此设置启用时出错将自动导致事务回滚(使用RAISERROR语句在代码中引发的错误除外)。
答案 1 :(得分:0)
目前看来,RDS不支持分布式事务。
答案 2 :(得分:0)
RDS for SQL Server现在支持分布式事务-https://aws.amazon.com/about-aws/whats-new/2020/05/amazon-rds-for-sql-server-now-supports-distributed-transactions/
答案 3 :(得分:0)