2010-11-13 95 views
2

我想通过链接服务器更新行。我在本地SQL-Server上用this指令创建了链接服务器。来自链接服务器的SQL-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。

回答

1

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

+0

是的,它的本地服务器和“分散安装致敬的交易协调员“servis雕像是”开始“的。但如果你问关于链接服务器,我不知道。因为我不能访问这个服务器。 – Kerberos 2010-11-13 12:51:22

0

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

  • ,开始 - >设置 - >控制面板 - >管理工具>数据源
  • 开放系统DSN选项卡
  • 选择驱动程序,您使用的链接服务器,然后单击配置
  • 选择高级> Flags3和取消选中禁用事务复选框

问题解决了:)

+1

这似乎不是答案。原始海报(OP)已经在编辑中为问题提供了答案。 – bobs 2011-07-14 00:23:46

+0

有三个DNS .. USER DNS,系统DNS和文件DNS whixch我将使用 – 2013-03-13 12:01:07