【问题标题】:Insert to remote server MSSQL 2005插入到远程服务器 MSSQL 2005
【发布时间】:2013-07-01 01:17:05
【问题描述】:

我想将触发器中的数据从我的本地 mssql 2005 服务器插入到远程 mssql 2005 服务器。

我有一张桌子 Syr;我创建了一个触发器(AFTER INSERT)来检测是否添加了一些东西。 我想将该数据复制到另一台远程服务器的同一张表中。 我的问题是,如果我只是在普通查询中执行插入语句(这很简单,使用静态数据仅用于测试),它就成功了;我什至可以从远程服务器中进行选择。 但是当我把这个简单的插入放到一个触发块中时:“无法开始分布式事务”

CREATE TRIGGER T_SyrInserted
ON [DBProba].[dbo].[Syr]
AFTER INSERT
AS BEGIN

INSERT INTO [RemoteSrv].[DBProba].[dbo].[Syr] (SyrId, SyrNm ) VALUES (15000734, 'valami')
END

已解决:

  • 将 DTC 身份验证设置为无
  • 我遇到错误“嵌套事务无法执行,因为 XACT_ABORT 为 OFF”,因此在插入语句之前添加了一行:SET XACT_ABORT ON;我不知道我用简单的插入做了什么“嵌套”,但很好......

【问题讨论】:

  • DTC 两端开启?...
  • 在“正常查询”中尝试 exec BEGIN DISTRIBUTED TRANSACTION。在触发器上下文中执行的查询会自动包装在事务中。如果触发代码中有分布式查询,则事务自动提升为分布式事务。
  • 分布式事务控制在两台服务器上运行。防火墙已关闭。允许 DTC 访问,允许入站,允许出站..
  • 尝试将插入语句与“开始分布式事务”和“提交事务”括起来失败并出现相同的错误。选择语句也以这种方式失败,但如果我离开“分布式”关键字,则选择不会插入。另一个 sql server 在 vi​​rtualbox 机器上运行。检查 Windows 事件查看器。 mssql 或 msdtc 没有警告或错误。
  • 我将双方的身份验证从双向更改为无。然后我得到这个“需要嵌套事务,因为 XACT_ABORT 选项设置为 OFF。”当我尝试作为分布式事务插入时

标签: sql sql-server database sql-server-2005


【解决方案1】:

在您的情况下,更新语句打开一个本地事务,插入语句还打开一个与远程服务器的事务,分布式事务就是这种情况。

为了完成这项工作,您必须启动 DTC http://support.microsoft.com/kb/817064

想了解更多分布式事务,可以查看链接http://msdn.microsoft.com/en-us/library/windows/desktop/ms681205%28v=vs.85%29.aspx

【讨论】:

  • 谢谢大家。我将身份验证设置为无(DTC 属性),并在插入之前在触发器中添加了一行 SET XACT_ABORT ON,看起来它正在工作。
猜你喜欢
  • 2013-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
相关资源
最近更新 更多