Você precisará usar
sp_addlinkedserver
para criar um link de servidor. Consulte a documentação de referência para uso. Depois que o link do servidor for estabelecido, você construirá a consulta normalmente, apenas prefixando o nome do banco de dados com o outro servidor. IE:-- FROM DB1
SELECT *
FROM [MyDatabaseOnDB1].[dbo].[MyTable] tab1
INNER JOIN [DB2].[MyDatabaseOnDB2].[dbo].[MyOtherTable] tab2
ON tab1.ID = tab2.ID
Uma vez que o link é estabelecido, você também pode usar
OPENQUERY
para executar uma instrução SQL no servidor remoto e transferir apenas os dados de volta para você. Isso pode ser um pouco mais rápido e permitirá que o servidor remoto otimize sua consulta. Se você armazenar em cache os dados em uma tabela temporária (ou na memória) no DB1
no exemplo acima, você poderá consultá-lo da mesma forma que ingressar em uma tabela padrão. Por exemplo:-- 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
Confira a documentação do OPENQUERY para ver mais alguns exemplos. O exemplo acima é bastante artificial. Eu definitivamente usaria o primeiro método neste exemplo específico, mas a segunda opção usando
OPENQUERY
pode economizar tempo e desempenho se você usar a consulta para filtrar alguns dados.