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
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
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.
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.
2012
13
Aprile
Introducing Microsoft SQL Server 2012: Ebook gratuito
Maurizio Ceravolo
Con il rilascio di SQL Server 2012, Microsoft pubblica in maniera gratuita l'ebook "Introducing Microsoft SQL Server 2012" per iniziare a conoscere il nuovo dbms.
2010
26
Novembre
Modificare l'owner delle tabelle di un database su SQL Server
Maurizio Ceravolo
Vediamo un semplice script per generare l'sql per modificare l'owner di tutte le tabelle di un database in SQL Server.


Archivio Mensile Blog
Tag Cloud
Apple automazione deals Facebook geek Geolocalizzazione Google Google Immagini Google+ HTML 5 humor innovazione iPad Microsoft Programmazione SEO sintesi vocale social network video Windows Phone 7
Ultimi Post
I migliori di oggi
I più popolari del mese
Top post