【发布时间】:2014-04-03 08:01:12
【问题描述】:
我在两个不同的 sql 服务器中有同一张表(一个是 SqlServer 2000,另一个是 2008)。
我正在使用 sql server management studio。
我希望每次在 SqlServer 2000 表(Table_1)中的表上进行插入时,都会发生触发器,并且该记录也将插入到 SqlServer 2008 表(也是 Table_1)中的同一个表中。
sql server 2008 被定义为链接服务器,可以使用 sql server management studio 从 2000 db 连接在 2008 db 上运行查询和执行插入操作。
触发器定义如下:
ALTER TRIGGER [dbo].[trgrTable]
ON [dbo].[Table_1]
AFTER INSERT
AS
BEGIN
INSERT INTO [TLVSQL].[AVI_DEV].[dbo].[Table_1](ID, Value)
SELECT INSERTED.ID AS ID, INSERTED.Value AS Value
FROM INSERTED
END
[TLVSQL].[AVI_DEV] 是 2008 数据库名称。
但是每次我在 2000 表上执行插入时,我都会收到一条消息,指出插入失败,因为“sqloledb 无法启动分布式事务链接服务器...”。
链接服务器的安全委托定义明确,我将安全凭证明确设置为 db_owner 的用户/密码。
我做错了什么?我问的还有其他方法吗?
谢谢。
【问题讨论】:
-
我同意现有的答案 - 从触发器中,您不应尝试访问当前数据库的任何 外部 内容。它会严重减慢任何插入活动,如果它们是任何网络问题或远程服务器因任何原因而关闭,那么您将导致原始事务回滚。这很少是正确的做法——你让系统的可靠性取决于两台服务器的可靠性,而不是一台(假设它们都有 99% 的可靠性——你的系统将它们联系在一起)现在有 98% 的整体可靠性)
标签: sql sql-server sql-server-2008 triggers linked-server