Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Interroger des données en joignant deux tables dans deux bases de données sur des serveurs différents

Vous devrez utiliser sp_addlinkedserver pour créer un lien serveur. Voir la documentation de référence pour l'utilisation. Une fois le lien du serveur établi, vous construirez la requête normalement, en préfixant simplement le nom de la base de données avec l'autre serveur. C'est-à-dire :

-- FROM DB1
SELECT *
FROM [MyDatabaseOnDB1].[dbo].[MyTable] tab1
    INNER JOIN [DB2].[MyDatabaseOnDB2].[dbo].[MyOtherTable] tab2
        ON tab1.ID = tab2.ID

Une fois le lien établi, vous pouvez également utiliser OPENQUERY pour exécuter une instruction SQL sur le serveur distant et ne vous transférer que les données. Cela peut être un peu plus rapide et permettra au serveur distant d'optimiser votre requête. Si vous cachez les données dans une table temporaire (ou en mémoire) sur DB1 dans l'exemple ci-dessus, vous pourrez alors l'interroger comme si vous rejoigniez une table standard. Par exemple :

-- 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

Consultez la documentation d'OPENQUERY pour voir d'autres exemples. L'exemple ci-dessus est assez artificiel. J'utiliserais certainement la première méthode dans cet exemple spécifique, mais la deuxième option utilisant OPENQUERY peut économiser du temps et des performances si vous utilisez la requête pour filtrer certaines données.