SQL SERVER - Copia dati tra due tabelle in db diversi

venerdì 04 giugno 2010 - 13.45

DomA Profilo | Expert

Salve ragazzi,
vi espongo il mio problema. Ho due db Sql Server che hanno 2 tabelle identiche. Io devo copiare i dati dalla Tabella A del db 1 alla Tabella B del db 2.
Di solito, se le tabelle sono all'interno dello stesso db, utilizzo questo metoto:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Ma come si fa nel mio caso?
Spero di esser stato chiaro.
Grazie in anticipo.
Domenico

alx_81 Profilo | Guru

>Salve ragazzi,
Ciao

Il problema non è lato applicativo, tant'è che basta una modifica alla sintassi della tua query.
Rimane però il problema infrastrutturale.
Se tu hai due server diversi, devi aggiungere, nel server dove INSERISCI, il server da cui LEGGI (o viceversa.. sta a te decidere). L'aggiunta di un LINKED SERVER (Server collegato) viene effettuato o tramite Management Studio (http://msdn.microsoft.com/en-us/library/aa560998(BTS.70).aspx) oppure tramite T-SQL (con sp_addlinkedserver http://msdn.microsoft.com/en-us/library/ms190479.aspx). Una volta aggiunto il linked server, ti consiglio di fare un sinonimo, che puoi creare tramite Management Studio (http://www.ucertify.com/article/how-to-create-a-synonym-using-sql-server-management-studio_5605179.html) oppure tramite T-SQL (con CREATE SYNONYM http://msdn.microsoft.com/it-it/library/ms177544.aspx).
a quel punto, ipotizzando di aver aggiunto il linked server e il sinonimo ,la tua query diventerebbe:

"insert into tabella_B(campo1,campo2,campo3) select campo1,campo2,campo3 from SINONIMO where id='1'"

se non volessi usare il sinonimo:

"insert into tabella_B(campo1,campo2,campo3) select campo1,campo2,campo3 from SERVER.DATABASE.SCHEMA.TABELLA where id='1'"

dove SCHEMA, se non definito diversamente è dbo.

Ma facciamo un esempio semplice:

il server di partenza è SQL01, quello di destinazione SQL02. La tabella chiamata TAB_A è suSQL01 e lì devo inserire da una TAB_B residente su SQL02, nel database DB02.

1) creare il linked server su SQL01, chiamato SQL02 che punta a SQL02 (o all'ip)
2) creare il sinonimo SYN_TAB_B che punta a SQL02.DB02.dbo.TAB_B
3) cambiare la query in "insert into TAB_A(campo1,campo2,campo3) select campo1,campo2,campo3 from SQL02.DB02.dbo.TAB_B where id='1'"

spero di esserti stato di aiuto..
attenzione che quanto ti ho specificato è valido dalla versione 2005 di sql server..

>Grazie in anticipo.
di nulla!

--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

DomA Profilo | Expert

Ciao Alessandro,
ti rispondo solo oggi perchè mi ci è voluto qualche giorno, e molte prove, per metabolizzare ciò che mi hai spiegato. Anche se alla fine ho optato per l'inserimento delle due tabelle nello stesso db, sei stto molto chiaro nella spiegazione e mi hai insegnato molto su SQL Server.
Grazie,
Domenico

alx_81 Profilo | Guru

>Ciao Alessandro,
>ti rispondo solo oggi perchè mi ci è voluto qualche giorno, e
>molte prove, per metabolizzare ciò che mi hai spiegato. Anche
>se alla fine ho optato per l'inserimento delle due tabelle nello
>stesso db, sei stto molto chiaro nella spiegazione e mi hai insegnato
>molto su SQL Server.
hai provato anche i sinonimi? a volte sono molto comodi, anche solo per fare un refactor di oggetti di database..

--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5