Home Page Home Page Articoli SQL Server 2005 - La Import/Export utility

SQL Server 2005 - La Import/Export utility

Chi lavora sui Database si ritrova quasi quotidianamente a dover importare o esportare dati. SQL Server 2005 agevola notevolmente il compito tramite l'Import/Export Utility (ex DTS Import/Export di SQL 2000). Vediamo come funziona.
Autore: Alessandro Alpi Livello:
Così come succedeva con SQL Server 2000, anche con la versione 2005 è possibile gestire l’importazione/esportazione guidata dei dati. Può infatti essere utile, tramite interfaccia, copiare dati tra tabelle o creare tabelle di destinazione prima di copiarvi i dati selezionati, anche tramite query ad hoc. Nello scenario che illustrerò in questo tip, trasferirò solamente dati da un sql server 2005 ad un altro, ma l’utility permette molti altri tipi di trasformazioni (file flat, excel, access, db2 – per chi ha il provider installato, ecc..)

Come accedere all’utility Import/Export Wizard ?


Premendo il tasto destro su di un database è possibile accedervi così come indicato nell’immagine qui sotto.



Selezionare “Importa Dati..” o “Esporta Dati..”(Import Data o Export Data) considerando che il database selezionato può essere sorgente o destinazione dell’operazione da eseguire (anche se non selezioniamo il db corretto, avremo poi la possibilità di cambiare i dati di connessione).

Scenario


Supponiamo di avere due database, chiamati rispettivamente DataBase_1 e DataBase_2, i quali posseggono almeno una tabella in comune (stessa struttura, dati anche diversi) che chiameremo genericamente “Dati”. La tabella avrà i seguenti campi:

Codice SQL n°1
CREATE TABLE Dati
(
id int IDENTITY(1,1) PRIMARY KEY CLUSTERED,
Nome varchar(30) NOT NULL,
Cognome varchar(30) NOT NULL,
Eta tinyint NOT NULL
)


Sul DataBase_1 le righe nella tabella Dati sono le seguenti:



Mentre sul DataBase_2:



Avremo i seguenti possibili casi:

- Copia di dati tra tabelle identiche
- Copia di dati con creazione tabella di destinazione
- Copia di dati con l’ausilio di una query ad hoc

Per ognuno dei tre scenari, seguire le seguenti operazioni comuni:

1) Eseguire la tool di importazione/esportazione guidata. Ad esempio clickare su “Esporta dati” (in base alla scelta cambia l’ordine delle finestre del wizard)
2) Selezionare quale provider/server/database impostare come sorgente, nel nostro caso, provider di SQL Server 2005 nativo (Native client), server locale, DataBase_1



3) Selezionare la destinazione, nel nostro caso provider di SQL Server 2005 nativo (Native client), server locale, DataBase_2:



Ora passiamo, nello specifico ai casi.

Copia di dati tra tabelle identiche


Per copiare i dati da una o più tabelle sorgenti su di una o più tabelle di destinazione, selezionare la seguente modalità di copia:



Passiamo alla finestra successiva, andiamo a selezionare gli oggetti sorgente e ad associarli con quelli di destinazione (sono identici, a parità di nome vengono proposti gli oggetti di destinazione che lo hanno uguale). Nell’esempio prendiamo solo la tabella Dati, che è l’unica presente in entrambi i database.



Il pulsante Modifica Mapping definisce quali colonne di origine devono essere copiate verso colonne di destinazione e inoltre consente di selezionare alcune importanti opzioni aggiuntive, riassunte nella maschera qui di seguito:



Da notare che la colonna id è identity. In corrispondenza del suo mapping è stata selezionata la voce come destinazione. Questo per evitare errori in fase di esecuzione del pacchetto finale (gli identity, se non diversamente impostato, sono read only, quindi non vanno “mappati” altrimenti si avrà un errore a runtime durante il trasferimento dati). L’associazione per gli altri campi è già pronta, poiché gli oggetti di sorgente e destinazione sono gli stessi. È possibile comunque cambiare l’ordine di mapping delle colonne (ad esempio, potremmo invertire nome e cognome), facendo attenzione ad associare campi con datatype compatibili.
Le opzioni avanzate delle quali si può usufruire sono Accoda righe alla tabella di destinazione oppure Elimina righe dalla tabella di destinazione che permettono di eseguire operazioni di append sulla destinazione oppure pulirla per poi riempirla con le nuove righe. Selezionando l’eliminazione delle righe, eventuali campi identity ripartono dal valore iniziale impostato per la tabella. Con il check Consenti IDENTITY_INSERT poi, possiamo forzare lo stesso valore di un campo identity della sorgente sulla destinazione.

A questo punto, possiamo proseguire alla finestra successiva:



L’utente può scegliere se eseguire immediatamente il pacchetto (poiché viene creato un vero e proprio SSIS) oppure salvarlo, ed in questo caso si attivano ulteriori opzioni:
Tipo di salvataggio, su filesystem con file *.dtsx oppure su SQL Server, registrato direttamente su server di Integration Service).
Tipo di crittografia, per la protezione dei dati sensibili (selezionando protezioni con password, si abilita l’inserimento della password con cui criptare i dati).



Ecco una tabella riassuntiva dei tipi di protezione

1 - Non salvare dati riservati (Do not save sensitive)
Elimina le informazioni riservate quando si salva il package. Tutte le proprietà del SSIS che sono segnate come riservate non vengono salvate e quindi ogni utente che accede deve fornire queste informazioni (ad esempio le credenziali di connessione ai db server)

2 - Crittografia di tutti i dati riservati con una chiave utente (Encrypt sensitive with user key)
Cripta i dati riservati nel package utilizzando la chiave dell’utente corrente. Solo quell’utente con quel profilo che ha salvato il SSIS, può aprirlo e disporre dei dati riservati. Appena un nuovo utente apre e salva il pacchetto tutte le informazioni riservate vengono salvate a blank. Quindi l’esecuzione del SSIS fallisce a meno che non vengano reinseriti i dati.

3 - Crittografia di tutti i dati riservati con una password (Encrypt sensitive with password)
I dati riservati vengono criptati con una password scelta dall’utente che salva il package e salvati con il package stesso. Per aprire il SSIS è necessario conoscere la password. Se si apre il pacchetto senza la password corretta, l’utente deve inserire i nuovi dati riservati. Se non lo fa, il package fallisce all’esecuzione

4 - Crittografia di tutti i dati con una chiave utente (Encrypt all with user key)
Come il 2, ma i dati criptati comprendono tutto il package

5 - Crittografia di tutti i dati con una password (Encrypt all with password)
Come il 3, ma i dati criptati comprendono tutto il package

L’ultima schermata è quella di riassunto, con la quale controllare se le operazioni sono effettivamente quelle che ci aspettiamo.



Una volta dato l’OK, avremo un log con tutte le operazioni eseguite e gli eventuali warning/errori con tanto di messaggi di aiuto per comprendere quale evento li abbia scatenati.



Copia di dati con creazione tabella di destinazione


Riprendiamo dalla scelta degli oggetti, ma stavolta selezioniamo quei due che sono sul Database_1 e non sul Database_2



I simboli cerchiati di rosso stanno ad indicare che gli oggetti saranno creati nel database di destinazione.
Accendendo alle opzioni di Modifica Mapping noterete che le possibilità di selezione cambiano:



Innanzitutto è ovviamente solo possibile creare la tabella di destinazione. Grazie al pulsante Modifica Codice SQL possiamo cambiare l’istruzione CREATE TABLE corrispondente alla tabella che andiamo a creare. Questa sezione risulta molto utile se vogliamo scriptare anche gli indici, gli identity, le primary key (di default la tabella viene creata solo in base ai campi selezionati nel mapping) e le eventuali foreign key. Ovviamente bisogna fare molta attenzione all’sql che si decide di mettere nell’editor, fra l’altro non dei più comodi.
Poi vi è un nuovo check selezionabile, Elimina e ricrea tabella di destinazione che fornisce lo script DROP & CREATE dell’oggetto finale.
A questo punto, dalla finestra successiva alla fine si ha la medesima procedura di salvataggio, valida per ogni tipologia di operazione.

Copia di dati con l’ausilio di una query ad hoc


Per partire da una query definita dall’utente, l’operazione da scegliere è la seguente:



Questa volta, nella form successiva avremo un editor che si aspetterà l’inserimento di una query di selezione che sarà il datasource del trasferimento dati. Un esempio potrebbe essere quello indicato qui di seguito:



Con il tasto analizza è possibile controllare la sintassi dell’SQL scritto mentre il tasto sfoglia permette l’apertura di un file sql precedentemente creato.
La finestra successiva ripropone il solito elenco di oggetti di cui fare mapping:



Nell’immagine la destinazione è una nuova tabella (denominata genericamente Query) di cui è possibile cambiare lo script di creazione (pulsante Modifica Mapping), ma si può anche scegliere fra gli oggetti già presenti sul database di destinazione. Tramite il tasto anteprima è possibile avere un resoconto delle righe (primi 200 record) che verranno copiate dalla sorgente alla destinazione.
L’anteprima e la selezione fra gli oggetti già disponibili sul database di destinazione vale per ogni tipo di operazione. Anche per le copie di tabelle precedentemente descritti.
Da qui alla fine il procedimento rimane il medesimo.

Ogni qual volta si passa dal mapping degli oggetti, abbiamo due importanti opzioni di cui non ho parlato fino ad ora, Ottimizza per molte tabelle e Esegui in una transazione.
Sono opzioni di importanza rilevante, soprattutto quando si vuole gestire lo spostamento di più oggetti in un solo blocco. A parte l’ottimizzazione del codice per l’inserimento di più tabelle, che rende possibile la parallelizzazione di più operazioni di scrittura, la possibilità di incapsulare tutte le operazioni sotto una sola transazione permette un livello di integrità di dati maggiore, considerando anche che, in caso di errore (vi sono buone probabilità quando non si conoscono gli oggetti di ricevere errori di copia dati per violazione di vincoli) una rollback permette di ritornare allo stato di partenza, in maniera del tutto affidabile.

Conclusioni


Grazie ad import/export wizard è molto semplice copiare anche grandi quantità di oggetti/dati. Come succedeva per SQL Server 2000, anche con 2005 bisogna fare attenzione ad utilizzare questa utility. Ad esempio, non dimenticarsi delle foreign key presenti nel database, che potrebbero impedire alcuni inserimenti al fine di salvaguardare l’integrità.
Inoltre, quando si crea la tabella di destinazione partendo da una già esistente nell’origine, bisogna fare attenzione agli indici, i quali non verranno scriptati (a meno che non indicati in eventuali script di creazione). Quindi, import/export wizard ci aiuta ad eseguire la copia di dati, ci dà anche la possibilità di creare SSIS tramite wizard, evita la scrittura di codice.. ma con i corretti accorgimenti. Il SSIS creato è poi utilizzabile come template, oppure modificabile come meglio lo sviluppatore crede.
In apertura indicavo la possibilità di trasferire dati con l’ausilio di provider differenti da quelli indicati nel tip. Eccone un elenco (cambiano in base alla versione di SQL Server 2005 installata):



Chi già conosce SQL Server 2000 Import/Export Wizard non avrà alcun problema ad adattarsi alla nuova versione su 2005.
Voto medio articolo: 4.9 Numero Voti: 11
Alessandro Alpi

Alessandro Alpi

Il mio avvicinamento all'informatica si ha nel 1992 all'età di 11 anni, grazie al mio stupendo C64 ed il suo basic. Dopo essermi diplomato in informatica, inizio subito il lavoro da sviluppatore in una ditta di Parma. Passo 6 anni qui, lavorando per i primi 6 mesi su prodotti win32 (per lo più gestionali per ... Profilo completo

Articoli collegati

Garantire l'univocità di una colonna ammettendo valori NULL multipli
Chi sviluppa in ambito professionale o per puro diletto prima o poi si troverà ad affrontare tematiche nuove ed avvincenti. In questo articolo cercherò di illustrare tre tecniche con i relativi pregi e difetti per permettere con SQL Server di garantire l'univocità di una colonna senza alcuna limitazione sui valori NULL
Autore: Lorenzo Benaglia | Difficoltà:
Integrare Crystal Reports con una Windows Form
Ecco come sfruttare in modo semplice e rapido le funzionalità offerte dal tool di reportistica Crystal Reports di Business Objects all'interno di una Windows Form .NET, dalla crazione del Report al Binding dei dati.
Autore: Matteo Raumer | Difficoltà: | Commenti: 2
Il Logging con Integration Services 2005
Perchè si è bloccata la mia applicazione ? Che errori si sono verificati ? Perchè il flusso d'esecuzione non procede nel modo corretto ? Cerchiamo di capire come possono esserci utili le funzionalità di logging offerte da SQL Server e gli Integration Services per rendere più affidabili e consistenti le nostre applicazioni.
Autore: Alessandro Alpi | Difficoltà: | Commenti: 3
Utilizzare i SQL Server Agent Proxies con i Package SSIS
Chi utilizza frequentemente i SSIS Packages e accede a risorse esterne a SQL Server non può fare a meno di conoscere ed utilizzare i Proxy Account (o SQL Server Agent Proxies). Vediamo che cosa sono e come si utilizzano in modo proficuo.
Autore: Alessandro Alpi | Difficoltà: | Commenti: 4
Visual Studio 2005 Team System for Database Professionals
Scopriamo questo nuovo e potente Tool della famiglia Visual Studio 2005 Team System per creare, sviluppare, testare e gestire con più facilità e flessibilità i database di SQL Server.
Autore: Marco Caruso | Difficoltà:
Parallelismo tra SSIS e DTS, due prodotti a confronto
In questo articolo un'analisi sulle novità dei SQL Server 2005 Integration Services rispetto ai DTS di SQL Server 2000.
Autore: Alessandro Alpi | Difficoltà: | Commenti: 2
Overview dei SQL Server Integration Services (SSIS)
Scopriamo i nuovi Sql Server Integration Services presenti in SQL Server 2005 che sostituisco i DTS aggiungendo delle nuove funzionalità davvero interessanti
Autore: Alessandro Alpi | Difficoltà: | Commenti: 6 | Voto:
Leggere un file XML con SQL Server 2005
Scopriamo in questo articolo alcune potenzialità offerte dal nuovo database SQL 2005, tra cui il nuovo data type XML, e le Stored Procedures per importare e gestire all'interno del database file testuali in formato XML.
Autore: Lorenzo Benaglia | Difficoltà: | Commenti: 5
ExcelDataSetLib, una libreria .NET per esportare dati in formato Excel
In questo articolo verrà dimostrato come derivare la classe DataSet e integrare funzionalità per esportare in formato Excel XLS, XML o CSV i dati provenienti da un base dati qualsiasi.
Autore: David De Giacomi | Difficoltà: | Commenti: 3 | Voto:
Microsoft Application Blocks Data Access
Quante volte vi è capitato di riscrivere decine di volte lo stesso pezzo di codice all'interno di un progetto ? Scopriamo in questo articolo l'utilità dei Microsoft Application Blocks che vi permettono di ottimizzare il vostro codice evitando ripetizioni e vi facilitano la lettura.
Autore: Marco Caruso | Difficoltà:
Comprimere e decomprimere files ZIP con .NET e #ZipLib
Visualizzare il contenuto di un file Zip da una applicazione vi sembra una Mission Impossibile? Oppure la vostra azienda ha fatto un mutuo per pagare il componente che vi aiuta nel lavoro? Ecco un articolo che parla della libreria sharpZipLib, libreria Open Source per la gestione dei formati compressi.
Autore: Giovanni Ferron | Difficoltà: | Commenti: 7
Rivoluzione nel campo dei Reports con i SQL Reporting Services
Finalmente Microsoft ci mette a disposizione uno straordinario tool per la produzione di Report perfettamente integrato con l'architettura .NET. Fino ad ora siamo sempre stati abituati ad utilizzare il buono seppur limitato Crystal Report. Vediamo cosa cambia da ora in poi.
Autore: David De Giacomi | Difficoltà: | Commenti: 6 | Voto:
Scopriamo cosa sono gli Office XP PIA
Vediamo in quest'articolo una dettagliata introduzione dei PIA gli assemblies che permettono ad un'applicazione .NET di interagire e di dialogare con i prodotti della suite Microsoft Office XP.
Autore: David De Giacomi | Difficoltà: | Commenti: 6
Migliorare la qualità dei grafici nei Crystal Reports
In questo breve articolo vedremo come aumentare la qualità dei grafici prodotti da Crystal Reports durante il rendering tramite Web con ASP.NET e all'interno di applicazioni WinForms.
Autore: David De Giacomi | Difficoltà:
Costruire Report con ASP.NET e Crystal Reports
Vedremo in questo semplice Tutorial le istruzioni base che ci permetteranno di costruire un report avanzato usando ASP.NET e l'oggetto CrystalReportViewer integrato in questa versione di Visual Studio .NET.
Autore: David De Giacomi | Difficoltà: | Commenti: 14
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5