Blog
home > blog > Eseguire una query SQL da un SQL Server ad un altro

Tag: sql, SQL Server

Eseguire una query SQL da un SQL Server ad un altro

Esaminiamo il modo per eseguire query SQL fra database differenti e server differenti
di Maurizio Ceravolo

L'altro giorno mi sono trovato a dover fare query dal mio SQL Server in locale ad un server in remoto, combinando e confrontando dati da uno all'altro.

Fare query fra due database diffenti dello stesso server è molto semplice. Vediamo ad esempio una union fra database differenti.

SELECT Colonna FROM Database1.dbo.Tabella1
UNION
SELECT Colonna FROM Database2.dbo.Tabella2

Semplicissimo. Se dovesse essere frequente di aver bisogno di dover interrogare una tabella da un database differente, si può pensare a due strade.

  • se i dati non cambiano di frequente, si può pensare ad una importazione nel proprio database ad intervalli prefissati
  • se i dati cambiano di frequente, l'importazione potrebbe essere onerosa e problematica. Quindi la cosa più conveniente sarebbe fare una vista al cui interno richiamiamo la tabella dall'altro database nella forma

    SELECT * FROM Database1.dbo.Tabella1

    Attenzione solo ad un fatto. Eventuali chiavi esterne ai dati di questa vista non potrebbero rispettare i vincoli di integrità referenziale. Non è possibile creare relazioni fra dati di database differenti.
    Ultima considerazione: nel caso in cui la frequenza di aggiornamento sia superiore a qualche secondo, quindi frequente, ma non troppo, per migliorare le prestazioni possiamo pensare di rendere la vista statica.

Ma se invece dobbiamo prendere dati da un diverso server? La cosa più semplice da pensare, sarebbe di anteporre nelle query al nome del database, quello della macchina. In questo modo:

SELECT * FROM [ip].Database1.dbo.Tabella1

L'idea è giusta, ma non funziona, perchè occorre prima linkare quella macchina al server da cui parte la query. Per vedere la lista dei server linkati, basta eseguire la query

SELECT * FROM sys.servers

Se il server su cui vorremmo fare la query non è nella lista, dobbiamo aggiungerlo, usando la stored procedure di sistema sp_addlinkedserver. Ad esempio, io l'ho usata in questa forma:

EXEC sp_addlinkedserver  
   @server=N'ip',
   @srvproduct=N'',
   @provider=N'SQLNCLI'

Fatto questo adesso la query precedente funziona. Per chi volesse approfondire questa stored procedure, può leggere la documentazione cliccando qui.
Una ultima considerazione. Ci si potrebbe domandare, ma dove le inserisco le credenziali di autorizzazione a quella macchina? Non nella stored appena citata. Automaticamente vengono prese dai server registrati di quella macchina. Per ulteriori informazioni a questo proposito, vi rimando alla documentazione.

Post correlati
2010
9
Dicembre
TSQL: concatenare più record senza usare un cursore
Maurizio Ceravolo
Concatenare più record di una tabella in un'unica stringa necessita un cursore, che però è poco performante. Vediamo un metodo tramite FOR XML PATH per concatenare con una query secca.
2010
28
Ottobre
Abilitare e disabilitare i vincoli su un database SQL Server
Maurizio Ceravolo
Due stored procedure per abilitare e disabilitare i vincoli su un database SQL Server.
2011
18
Marzo
TSQL: convertire un numero in esadecimale
Maurizio Ceravolo
Alle volte c'è la necessità di convertire un numero in esadecimale direttamente dalla fonte dati per generare dei codici colore da usare direttamente su una pagina web.
2010
28
Ottobre
Ripristinare un backup su una versione precedente di SQL Server
Maurizio Ceravolo
Microsoft impedisce di ripristinare un backup creato con una versione successiva di SQL Server. Esaminiamo un workaround per aggirare il problema.
2012
12
Aprile
SQL Server 2012 è stato rilasciato
Maurizio Ceravolo
Microsoft ha comunicato di aver reso disponibile per la vendita ed il download SQL Server 2012, l'ultima release del suo DBMS.


Archivio Mensile Blog
Tag Cloud
Apple Facebook finanza fumetti geek Google Google+ humor infografica innovazione IPO istruzione Microsoft SEO SERP Simoncelli social network social plugin video Windows Phone 7
Ultimi Post
I migliori di oggi
I più popolari del mese
Top post