来自链接服务器的SQL-Server触发器更新问题

时间:2010-11-13 12:35:30

标签: sql sql-server linked-server

我想通过链接服务器更新行。我使用this指令在本地SQL-Server上创建了链接服务器。

我可以使用以下代码更新查询分析器上的行。未成功返回错误并且已在Linked Server上更新行。

UPDATE  [LinkedServer].[Database].[dbo].[Table]
SET A = 'A', B = 'B'
WHERE id = 1

但是当我在本地sql server上为我的表创建更新触发器时,如下所示

ALTER TRIGGER [TriggerLocalServerTable]
   ON  dbo.[LocalServerTable]
    FOR UPDATE
AS 

DECLARE @A varchar(4)
DECLARE @B varchar(4)
DECLARE @id int

BEGIN
 SELECT
 @A = A,
 @B = B,
 @id = id
 FROM inserted

 UPDATE  [LinkedServer].[Database].[dbo].[Table]
 SET A = @A, B = @B
 WHERE id = @id      
END

执行触发时,返回如下所示的错误

  

OLE DB提供程序“SQLNCLI”用于链接   服务器“LinkedServer”返回消息   “合伙人交易经理有   禁用它的支持   远程/网络交易。“。消息   7391,第16级,状态2,程序   TriggerLocalServerTable,第45行   无法执行此操作   因为OLE DB提供程序“SQLNCLI”   链接服务器“LinkedServer”无法使用   开始分布式交易。

我将this指令应用于本地服务器以解决问题,任何更改。

更多细节;

  • 如果定义了我的链接服务器 远程IP地址。
  • 我的本地服务器和链接服务器 不在同一个域中。
  • 链接服务器安全设置为“是 使用此安全上下文“
  • 本地服务器版本是Windows Server 2003 SP2,SQL-Server版本是2005 非标准。
  • 链接服务器操作系统版本是2008和 SQL-Server版本2008(64位)。
  • 我无法访问远程服务器
    与RDP。我只能从sql访问 港口(1433)。
  • 我设置链接服务器“RPC”和“RPC 从“安全选项”出来“到”真实“。

你有任何想法解决这个问题。 非常感谢你。

修改 我解决了这个问题。首先,我在[TriggerLocalServerTable]上创建了更新触发器。此触发器的作业是将新的更新字段插入到本地表中。此新表用于更新临时数据。然后我创建了一个每小时运行一次的作业,用于在LinkedServer上更新文件。此作业从临时表中获取数据,然后更新到LinkedServer表的字段。

问候,Kerberos。

2 个答案:

答案 0 :(得分:1)

您是否在Windows Server上安装了分布式事务处理协调器?如果您的更新在事务中,那么没有它就无法工作。 看到 link text

答案 1 :(得分:0)

问题不在于SQL Server,而在于ODBC驱动程序。

  • 转到开始>设置>控制面板>管理工具>数据来源
  • 打开系统DSN标签
  • 选择您用于Linked Server的驱动程序,然后单击configure
  • 选择高级> Flags3和Uncheck Disable transaction复选框

解决问题:)