您需要使用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
查看documentation for OPENQUERY个,查看更多示例.上面的例子很做作.在这个具体的例子中,我肯定会使用第一种方法,但是如果使用查询过滤掉一些数据,使用OPENQUERY
的第二种方法可以节省一些时间和性能.