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
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.
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.
2011
4
Febbraio
Dimensioni di tutte le tabelle di un database SQL Server
Maurizio Ceravolo
Vediamo una stored procedure per calcolare le dimensioni, in numero di record ed in occupazione su disco, di dati ed indici di ogni tabella di un database su SQL Server.
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.


Archivio Mensile Blog
Tag Cloud
amore Apple deals Doodle english Facebook geek Google Google+ humor innovazione iPad iPhone marketing Microsoft social network social plugin video viral web performance
Ultimi Post
I migliori di oggi
I più popolari del mese
Top post