编写查询,该查询使用位于不同服务器上的两个数据库中的两个表

时间:2017-08-30 13:25:20

标签: mysql sql-server

是否可以编写一个查询,该查询使用不同服务器上不同数据库中的表?

我有table_1存在于数据库" db1"在server1上,还有另一个表table_2存在于数据库" db2"在server2上。

我该怎么做? 服务器可以是MySQL,HSQL或MS-SQL中的任何一个。这是主要的问题.........没有不同的服务器,也有不同类型的服务器。

sp_addlinkedserver是否适用于此类情况???

3 个答案:

答案 0 :(得分:0)

在MS SQL服务器上设置linked servers。然后你可以查询两个服务器,如

从[server1]。[数据库]中选择*。[dbo]。[table]

从[server2]中选择*。[数据库] .. [table]

或使用OPENQUERY(可能是首选因为这只是将命令发送到其他服务器而不是源服务器试图解析它)

答案 1 :(得分:0)

您需要使用sp_addlinkedserver来创建服务器链接。有关用法,请参阅reference documentation。建立服务器链接后,您将正常构建查询,只需在数据库名称前加上其他服务器。即:

-- FROM DB1
SELECT *
FROM [MyDatabaseOnDB1].[dbo].[MyTable] tab1
    INNER JOIN [DB2].[MyDatabaseOnDB2].[dbo].[MyOtherTable] tab2
        ON tab1.ID = tab2.ID

建立链接后,您还可以使用OPENQUERY在远程服务器上执行SQL语句,并仅将数据传回给您。这可以更快一点,它将让远程服务器优化您的查询。如果您在上面的示例中将数据缓存在DB1上的临时(或内存)表中,那么您就可以像加入标准表一样查询它。例如:

-- Fetch data from the other database server
SELECT *
INTO #myTempTable
FROM OPENQUERY([DB2], 'SELECT * FROM [MyDatabaseOnDB2].[dbo].[MyOtherTable]')

-- Now I can join my temp table to see the data
SELECT * FROM [MyDatabaseOnDB1].[dbo].[MyTable] tab1
    INNER JOIN #myTempTable tab2 ON tab1.ID = tab2.ID

查看OPENQUERY的文档以查看更多示例。上面的例子非常人为。我肯定会使用这个特定示例中的第一个方法,但如果您使用查询过滤掉一些数据,那么使用OPENQUERY的第二个选项可以节省一些时间和性能。

答案 2 :(得分:0)

以下查询将有所帮助。

SELECT TS1.COLUMN01, TS2.COLUMN02 
FROM Server1.DBName..TableName TS1, Server2.DBName..TableName TS2 
WHERE TS1.COLUMN03 = TS2.COLUMN03