我需要选项来查询多个SQL服务器

近几个月来,我们已经转换为一个新的软件应用程序。 迁移团队(供应商)保留原来的数据库。 他们使用新供应商的数据库结构将一些旧数据转换为“归档”数据库。 (这样,新软件就可以用来访问归档数据 – 从而免去了旧软件许可证的需要。)由于转换,我们公司已经将数据input到新的数据库中。

我需要从所有三个数据库(在两台SQLserver2005服务器上)提取数据。 我想使用“联合”查询来拉取所有的数据,并自动消除任何重复的logging。

我已经去了“谷歌任务”,并做了一些阅读。 一个选项是链接服务器。 我遇到的另一个select是OPENDATASOURCE。

我的三个数据库位于两个SQL Server上:

  • “服务器Box1”:包含服务器FAYRMS1(SQL Server 9.0.3042),一个旧数据库旧数据,名为VSI_DATA
  • “服务器Box2”:包含服务器FAYOSSIRMS(SQL Server 9.0.1399),一个归档数据库,命名为rmsconv,一个数据库为“实时”数据,命名为rms

我可以单独“连接”所有三个数据库(Windows身份validation)。 当连接到每个特定的数据库,我可以执行一个查询,返回我需要的数据。 当我连接到一个数据库,并尝试从另一个数据库中提取数据时,我遇到了麻烦。 (我试图在我的FROM子句中创build完全限定名 – 我得到了错误,我查询了sys.servers,发现数据库没有链接。)

我search了很多东西,但是我还没有find答案。 做一个将从3个数据库中提取数据的UNION查询的语法是什么?

我会创build链接服务器来做到这一点,如果你只是做简单的select。 OPENDATASOURCE是没有必要的。 你的查询会是这样的:

SELECT Field1, Field2, Field3, Field4 FROM [Server1].[Database1].[MySchema].[Table1] UNION SELECT Field1, Field2, Field3, Field4 FROM [Server2].[Database2].[MySchema].[Table2] UNION SELECT Field1, Field2, Field3, Field4 FROM [Server3].[Database3].[MySchema].[Table3] 

假设您有3台名为Server1,Server2和Server3的链接服务器

对于你的环境,你并没有真正地说出你正在查询哪个实例,所以我将假定你正在从具有实时数据数据库的实例开始工作。

在FAYOSSIRMS上创build一个指向FAYRMS1的链接服务器,命名为FAYRMS1。

然后你的查询看起来像这样:

 SELECT [SomeData] FROM [rms].[dbo].[Table1] UNION SELECT [SomeData] FROM [rmsconv].[dbo].[Table2] UNION SELECT [SomeData] FROM [FAYRMS1].[VSI_DATA].[dbo].[Table3] 

(假设你的模式是dbo)

编辑
如果你坚持使用OPENDATASOURCE,那就试试看:

 SELECT [SomeData] FROM [rms].[dbo].[Table1] UNION SELECT [SomeData] FROM [rmsconv].[dbo].[Table2] UNION SELECT [SomeData] FROM OPENDATASOURCE('SQLNCLI','Data Source=FAYRMS1;Integrated Security=SSPI') .VSI_DATA.dbo.Table3 

这将使用SQL Native Client和Windows身份validation打开与FAYRMS1的连接