Чтобы создать ссылку на сервер, вам необходимо использовать sp_addlinkedserver. См. Справочную документацию для использования. После установления связи с сервером вы создадите запрос как обычно, просто префикс имени базы данных на другом сервере. То есть:
-- 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 может сэкономить время и производительность, если вы используете запрос для фильтрации некоторых данных.
И еще - включить специальные распределенные запросы на вашем MSSQL сервере и использовать строку подключения к оракулу непосредственно в OPENROWSET или OPENDATASOURCE https://msdn.microsoft.com/en-us/library/ms187569.aspx – vitalygolub