如何使用一个SELECT语句从两个服务器中的两个数据库中获取数据?

Kal*_*ina 4 sql database oracle select

我实际上并不想修改任何一个数据库,只是获取数据.

我知道如何使用这些连接字符串单独连接到每个数据库:

Provider=SQLOLEDB.1;Data Source={0};Initial Catalog={1};Integrated Security=SSPI;Persist Security Info=False;

Provider=OraOLEDB.Oracle.1;Data Source={0};User ID={1};Password={2};Persist Security Info=True;
Run Code Online (Sandbox Code Playgroud)

但是如何将这些重叠数据放在一起呢?这是否可能,特别是考虑到一个是Oracle,一个是SQL Server?或者,最好是单独对每个数据库执行SELECT语句,然后再匹配它们?


例如,我如何让所有10岁的学生都喜欢蓝色? 两张桌子

请注意,DatabaseB中的所有项都有一个映射到DatabaseA的ID,但不是相反.

Nam*_*ian 8

我用MySQL,Oracle和SQL服务器完成了这个.您可以从中央MSSQL服务器到Oracle和其他MSSQL服务器创建链接服务器.然后,您可以使用链接服务器直接查询对象,也可以创建数据库中链接服务器表的同义词.

创建和使用链接服务器的步骤如下:

  1. 在"主"MSSQL服务器上,为包含两个数据库的服务器创建两个链接服务器,或者如您所说的数据库A和数据库B.
  2. 然后,您可以使用纯TSQL select语句直接查询链接服务器上的表.

要创建到Oracle的链接服务器,请参阅以下链接:http://support.microsoft.com/kb/280106

更多关于同义词.如果您要在大量查询中使用这些链接服务器表,那么使用同义词来帮助维护代码可能是值得的.同义词允许您以不同的名称引用某些内容.

因此,例如,当从链接服务器中选择数据时,通常使用以下语法来获取数据:

SELECT *
FROM Linkedserver.database.schema.table
Run Code Online (Sandbox Code Playgroud)

如果您为Linkedserver.database.schema.table创建了DBTable1的同义词,则语法为:

SELECT *
FROM DBTable1
Run Code Online (Sandbox Code Playgroud)

它节省了一点打字加上如果您的链接服务器发生了变化,您不需要在代码中进行更改.就像我说的,如果你在很多代码中使用链接服务器,那么这真的很有用.

更谨慎的是,您可以在不同服务器上的两个表之间进行连接.这通常很痛苦.我发现你可以从不同的服务器中选择数据到临时表中,加入临时表通常可以加快速度.您的milage可能会有所不同,但如果您要加入不同服务器上的表,这种技术可以提供帮助.

如果您需要更多详细信息,请告诉我们.