我在sql server中有一个表,在mysql服务器中有一个名称和字段相同的表。我使用以下触发器将它们连接到链接服务器:
CREATE TRIGGER items_insert ON [prueba]
FOR INSERT
AS
BEGIN
declare @tmp table (a int, b varchar(10))
insert @tmp (a, b) select ID, Name from inserted
COMMIT
SET XACT_ABORT ON
INSERT INTO OPENQUERY(WEBDB, 'SELECT * FROM prueba')
SELECT a, b FROM @tmp
begin tran
end
我的问题是,当我离开mysql serverm并在sql server中插入一条记录时,它显然不会插入mysql中,但是当我把mysql服务器放入时它也没有。我想要一个排序队列,以便当服务器之间的连接丢失时,在恢复连接时,在此期间的任何新记录都插入到mysql中。我怎么能实现这个?,我是sql server和触发器的新手
注意:根据this教程,触发器具有@tmp声明,因为我收到有关事务错误的奇怪错误
答案 0 :(得分:2)
触发器永远不会排队,并且在触发器内使用链接服务器是a bad idea。你会发现有数百人用我的手指烧着他们的手指。
对于任何队列类型系统,您需要实现服务代理,或者Nilesh指出使用对表进行排队的作业。
您当前的设置将会出现问题,因为几年前我使用相同的方法尝试将数据从SQL2005传输到MySQL服务器。在SQL2000中偶然可以将数据从MSSQL复制到任何其他ODBC数据源。 Microsoft在SQL2005中停止了这一点。
所以你在这里有两个选择。