如何使用跨越多个服务器链接的程序的事务?

Ben*_*ter 6 t-sql transactions sql-server-2005

我正在尝试测试我们的某个供应商向我们提供访问其产品数据库的提议,并且它涉及跨越多个服务器的查询和事务.我以前从来没有直接在数据库上做过这件事,坦率地说,我很无能为力,所以我试图模仿一个证据,证明这至少在概念上是有效的.

我有两个SQL Server 2005服务器.让我们为了论证的缘故,将它们称为Server1和Server2 [掌握你的掌声],每个都包含一个虚拟数据库.Server1上的虚拟数据库称为Source,而Server2上的虚拟数据库称为Destination,只是为了简单起见.每个数据库分别拥有一个名为Input和Output的表,因此结构的准解释如下:

  • Server1.Source.dbo.Input
  • Server2.Destination.dbo.Output

我在Server2上有一个名为WriteDataToOutput的存储过程,它接收一个Varchar参数并将其内容写入输出表.

现在诡计开始了:

  1. 我想在Server1.Source上创建一个存储过程,它调用Server2上定义的WriteDataToOutput存储过程,这看似简单的步骤.
  2. 我希望此调用是事务的一部分,以便如果调用它的过程失败,则回滚整个事务.

在这里,我努力学习如何做.谁能指出我正确的方向?我在同一台服务器上的两个不同的数据库上试过这个,它运行得很好,让我觉得它可以在不同的服务器上工作,问题是,我该如何做这样的事情?我从哪里开始?

K R*_*ard 5

正如其他人所说,我同意链接服务器是最好的方法.

以下是我第一次处理链接服务器时遇到的一些指示:

  • 如果链接服务器是实例,请确保将名称括起来.例如[SERVERNAME\INSTANCENAME].

  • 使用链接服务器中的表或视图的别名,否则将出现"无法绑定多部分标识符"错误.4部分命名约定有限制.例如,SERVER.DATABASE.dbo.TABLE.FIELD有五个部分,将给出错误.但是,SELECT linked.FieldName FROM SERVER.DATABASE.dbo.TABLE AS linked工作正常