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
SSIS - Come gestire al meglio i valori Null dell'origine dati
giovedì 25 ottobre 2007 - 12.21
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
roddik1980
Profilo
| Junior Member
92
messaggi | Data Invio:
gio 25 ott 2007 - 12:21
Buongiorno a tutti,
ho un pò di dubbi sulla gestione dei valori NULL nell' importazione di un fileflat.txt all' interno di una tabella SQL Server 2005.
Ho bisogno di chiarirmi le idee; se farò delle affermazioni errate all' interno del seguente thread per favore correggetemi.
Sto importando il file.txt nella tabella SQL Server 2005.
1) Cosa significa per me NULL:
- Se il campo è di tipo numerico ed è vuoto per me è NULL! Se invece qualcuno è entrato nel campo inizializzandolo per esempio inserendo spazi apparentemente invisibili per me non è più NULL........
Inoltre il NULL va usato solo con i campi numerici oppure posso usarlo anhe con i campi stringa/testo ???
1° Esempio per descrivervi il mio 1° problema.
Il campo "codicecontabilita" è di tipo INT, proviene da un gestionale, l' utente lo "può" inserire solo da una combobox che prevede i valori 0, 1, 2 ma non essendo un campo obbligatorio il campo può non essere valorizzato dall' utente !
Attenzione, a questo punto chi mi esporta il campo "codicecontabilita" nel file.txt non può mettere lo 0 (zero) di default per tutti i campi "codicecontabilita" non valorizzati / NULL perchè lo 0 (zero) ha un significato ben preciso nella logica del gestionale !
Succede quindi che nel file.txt mi vengono passati i valori 0, 1, 2 e il NULL / campo vuoto, infatti se apro il file.txt da excel importando il campo come TESTO ( se lo importo come numero excel mette lo zero di default !!!) e faccio un filtro sul campo il filtro mi dice che trova 0, 1, 2 e vuoto (NULL) !!!
A questo punto è di vitale importanza mantenere i valori NULL però, ed è qui che nasce il problema, se importo con SSIS il file.txt e metto il flag su "Mantieni i valori Null dell'origine come valori Null nel flusso di dati" (ORIGINE FILE FLAT) e anche su "Mantieni i valori null" (DESTINAZIONE OLEDB) comunque la procedura mi trasforma i campi NULL in 0 (zeri) !!!
Mi sapete aiutare per favore ?
2° problema.
a) Una campo stringa/testo "vuoto" è diverso da un campo stringa/testo che contiene "spazi" ! Apparentemente no ma in realtà si ! Vero ?
b) Come faccio a verificare ed esser certo se un campo stringa/testo è "vuoto" oppure contiene "spazi" ?
Ho pensato, ma non so se è la soluzione migliore, di usare una funzione se esiste, "quale ?", che toglie tutti gli spazi da un campo stringa/testo e poi farmi restituire da un altra funzione, "quale ?", la lunghezza del campo che se = 0 allora vuol dire che è vuoto, giusto ?
Grazie a tutti coloro che mi vorranno aiutare.
Mark
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
gio 25 ott 2007 - 13:48
457_ImportaNull.zip
>Buongiorno a tutti,
Ciao!
>
>ho un pò di dubbi sulla gestione dei valori NULL nell' importazione di un fileflat.txt all' interno di una tabella SQL Server 2005.
>Ho bisogno di chiarirmi le idee; se farò delle affermazioni errate all' interno del seguente thread per favore correggetemi.
>
>Sto importando il file.txt nella tabella SQL Server 2005.
>
>1) Cosa significa per me NULL:
>- Se il campo è di tipo numerico ed è vuoto per me è NULL! Se invece qualcuno è entrato nel campo inizializzandolo per esempio
>inserendo spazi apparentemente invisibili per me non è più NULL........
Corretto. Poi ovviamente devi dire al task di trattare i campi vuoti come NULL effettivi anche sul DB.
>Inoltre il NULL va usato solo con i campi numerici oppure posso usarlo anhe con i campi stringa/testo ???
NULL è utilizzabile con tutti i tipi di dato, stringhe, numerici, date..
>
>
>1° Esempio per descrivervi il mio 1° problema.
>Il campo "codicecontabilita" è di tipo INT, proviene da un gestionale, l' utente lo "può" inserire solo da una combobox che prevede
>i valori 0, 1, 2 ma non essendo un campo obbligatorio il campo può non essere valorizzato dall' utente !
>Attenzione, a questo punto chi mi esporta il campo "codicecontabilita" nel file.txt non può mettere lo 0 (zero) di default per tutti
>i campi "codicecontabilita" non valorizzati / NULL perchè lo 0 (zero) ha un significato ben preciso nella logica del gestionale!
>Succede quindi che nel file.txt mi vengono passati i valori 0, 1, 2 e il NULL / campo vuoto, infatti se apro il file.txt da
>excel importando il campo come TESTO ( se lo importo come numero excel mette lo zero di default !!!) e faccio un filtro sul campo
>il filtro mi dice che trova 0, 1, 2 e vuoto (NULL) !!! A questo punto è di vitale importanza mantenere i valori NULL
>però, ed è qui che nasce il problema, se importo con SSIS il file.txt e metto il flag su "Mantieni i valori Null dell'origine
>come valori Null nel flusso di dati" (ORIGINE FILE FLAT) e anche su "Mantieni i valori null" (DESTINAZIONE OLEDB) comunque la
>procedura mi trasforma i campi NULL in 0 (zeri) !!!
>Mi sapete aiutare per favore ?
Guarda, se utilizzi correttamente quei flag, ti garantisco che il null viene utilizzato come null. Ti consiglio di utilizzare qualche dataviewer per capire come ti arrivano i dati e come si trasformano nel tuo dataflow.
Qui c'è una breve guida su come usare i dataviewer (verso la metà)
http://www.dotnethell.it/articles/SQL-Server-SSIS-DTS.aspx
In allegato trovi un ssis che importa un file coi null su sql server 2005..
>2° problema.
>a) Una campo stringa/testo "vuoto" è diverso da un campo stringa/testo che contiene "spazi" ! Apparentemente no ma in realtà si ! Certo, gli spazi sono caratteri, vuoto è nessun carattere.
>b) Come faccio a verificare ed esser certo se un campo stringa/testo è "vuoto" oppure contiene "spazi" ?
>Ho pensato, ma non so se è la soluzione migliore, di usare una funzione se esiste, "quale ?", che toglie tutti gli spazi da un campo
>stringa/testo e poi farmi restituire da un altra funzione, "quale ?", la lunghezza del campo che se = 0 allora vuol dire
>che è vuoto, giusto ?
Allora.. se quello che intendi è gestire gli spazi come null, puoi usare una TRIM con un Derived Column task (Colonna derivata).
Nell'allegato c'è anche quello..
>
>Grazie a tutti coloro che mi vorranno aiutare.
di nulla!
Alx81 =)
http://blogs.dotnethell.it/suxstellino
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
gio 25 ott 2007 - 13:57
458_ImportaNull.zip
qui c'è anche il file sorgente..
ciao!
Alx81 =)
http://blogs.dotnethell.it/suxstellino
roddik1980
Profilo
| Junior Member
92
messaggi | Data Invio:
gio 25 ott 2007 - 14:28
Grazie Alex_81, sempre molto esauriente e preciso.
Buona giornata
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
gio 25 ott 2007 - 14:53
>Grazie Alex_81, sempre molto esauriente e preciso.
troppo gentile
>
>Buona giornata
a te!
Alx81 =)
http://blogs.dotnethell.it/suxstellino
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 !