Ще трябва да използвате sp_addlinkedserver
за създаване на връзка към сървъра. Вижте справочната документация за употреба. След като връзката към сървъра бъде установена, ще изградите заявката както обикновено, като просто поставите префикс на името на базата данни с другия сървър. I.E:
-- 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
може да спести известно време и производителност, ако използвате заявката, за да филтрирате някои данни.