Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Consultando dados juntando duas tabelas em dois bancos de dados em servidores diferentes


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.