Sqlerver 2005 Express - Importare dati da un DB ad un altro - Problema...

venerdì 30 maggio 2008 - 14.19

lolic Profilo | Newbie

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

>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

>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

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.
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5