Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Sqlerver 2005 Express - Importare dati da un DB ad un altro - Problema...
venerdì 30 maggio 2008 - 14.19
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
lolic
Profilo
| Newbie
37
messaggi | Data Invio:
ven 30 mag 2008 - 14:19
Ciao a tutti,
scrivo per sapere se vi è un modo per importare i dati da un database ad un altro esistente (con dati già presenti e di struttura del tutto uguale) utilizzando query/funzionalità presenti in SqlServer senza scrivere un'apposito tool
Il problema sta nelle relazioni tra le tabellle. Date due tabelle TABLE_01 e TABLE_02 (dove le chiavi primarie sono degli Identity) in correlazione tra di loro "uno a molti" nel database di destinazione dovrei 1. Inserire i record della TABLE_01 2. Inserire i record della TABLE_02 però alterando il valore della chiave esterna per utilizzare la nuova chiave assegnata al record nella TABLE_01.
Es. TABLE_01 TABLE_02
PK MASTER PK DETAIL FK
DATABASE DI ORIGINE (01, "Master01" ) (01, "Detail01", "01")
DATABASE DI DESTINAZIONE (89, "Master01" ) (08, "Detail01", "89")
In altri termini, mi serve un sistema di trasferimento dati che tenga conto delle relazioni tra le tabelle.
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
ven 30 mag 2008 - 15:05
>Ciao a tutti,
>scrivo per sapere se vi è un modo per importare i dati da un
>database ad un altro esistente (con dati già presenti e di struttura
>del tutto uguale) utilizzando query/funzionalità presenti in
>SqlServer senza scrivere un'apposito tool
Ciao,
puoi scaricare Visual Studio .NET Database Edition da Microsoft Download che ti aggiunge funzionalità per la sincronizzazione di dati e schema di Database SQL Server. Verifica se la tua versione di Visual Studio consente l'installazione della Database Edition (c'è solo per la 2005 o la 2008).
Oppure i tools della red-gate come SQL Compare e SQL Data Compare:
http://www.red-gate.com/
Ciao
David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
ven 30 mag 2008 - 15:09
>scrivo per sapere se vi è un modo per importare i dati da un
>database ad un altro esistente (con dati già presenti e di struttura
>del tutto uguale) utilizzando query/funzionalità presenti in
>SqlServer senza scrivere un'apposito tool
>
>Il problema sta nelle relazioni tra le tabellle. Date due tabelle
>TABLE_01 e TABLE_02 (dove le chiavi primarie sono degli Identity)
>in correlazione tra di loro "uno a molti" nel database di destinazione
>dovrei 1. Inserire i record della TABLE_01 2. Inserire i record
>della TABLE_02 però alterando il valore della chiave esterna
>per utilizzare la nuova chiave assegnata al record nella TABLE_01.
Ciao Andrea,
Hai verificato se per caso esistono delle sovrapposizioni tra i valori delle PK delle due tabelle tra il db di origine e quello di destinazione?
Nel caso non esistano, puoi semplicemente disabilitare l'attributo IDENTITY per le due tabelle per tutta la durata dell'importazione utilizzando il comando SET IDENTITY_INSERT <tabella> ON.
Al termine dell'operazione potrai disattivare l'opzione impostandola semplicement a OFF.
"SET IDENTITY_INSERT (Transact-SQL)"
http://msdn.microsoft.com/en-us/library/ms188059.aspx
Nel caso invece esistano, o modifichi tutte le chiavi nel db (di origine o di destinazione) e poi procedi come sopra, oppure devi scriverti una piccola utility che inserisca una riga nella tabella padre, recupera il nuovo ID e lo utilizza per valorizzare la FK nella tabella dei figli.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
lolic
Profilo
| Newbie
37
messaggi | Data Invio:
ven 30 mag 2008 - 16:42
Purtroppo vi è sovrapposizione delle PK e quindi dovrò procedere con lo scrivere un apposito tool. Verifico comunque se i tool indicati consentono o meno di risolvere il problema.
Invece sempre per risolvere il mio problema, c'è un modo per poter inserire in una tabella (anche temporanea) una serie di record con le corrispondenze degli ID? Così da poter successivamente sfruttare gli INSERT INTO ..... SELECT per tutte le tabelle DETAILS.
Dovrei eseguire un INSERT INTO DBDESTINAZIONE.dbo.TABLE_01 (MASTER) SELECT MASTER FROM DBSORGENTE.dbo.TABLE_01. Ma nel contempo riuscire ad inserire in un tabella di supporto le correlazioni degli ID: VECCHIO-NUOVO.
Forse però riesco a risolverlopiù velocemente se mi metto a sviluppare un piccolo tool.
Torna su
Stanze Forum
Elenco Threads
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 !