Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Interrogazione dei dati unendo due tabelle in due database su server diversi

Dovrai utilizzare sp_addlinkedserver per creare un collegamento al server. Vedere la documentazione di riferimento per l'utilizzo. Una volta stabilito il collegamento al server, costruirai la query normalmente, semplicemente anteponendo il nome del database all'altro server. IE:

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

Una volta stabilito il collegamento, puoi anche utilizzare OPENQUERY per eseguire un'istruzione SQL sul server remoto e trasferire solo i dati all'utente. Questo può essere un po' più veloce e consentirà al server remoto di ottimizzare la tua query. Se memorizzi i dati nella cache in una tabella temporanea (o in memoria) su DB1 nell'esempio sopra, sarai in grado di interrogarlo proprio come unirti a una tabella standard. Ad esempio:

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

Consulta la documentazione di OPENQUERY per vedere altri esempi. L'esempio sopra è piuttosto artificioso. Userei sicuramente il primo metodo in questo esempio specifico, ma la seconda opzione usando OPENQUERY puoi risparmiare tempo e prestazioni se usi la query per filtrare alcuni dati.