SSIS - Come gestire al meglio i valori Null dell'origine dati

giovedì 25 ottobre 2007 - 12.21

roddik1980 Profilo | Junior Member

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

>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

qui c'è anche il file sorgente..
ciao!
Alx81 =)

http://blogs.dotnethell.it/suxstellino

roddik1980 Profilo | Junior Member

Grazie Alex_81, sempre molto esauriente e preciso.

Buona giornata

alx_81 Profilo | Guru

>Grazie Alex_81, sempre molto esauriente e preciso.
troppo gentile
>
>Buona giornata
a te!
Alx81 =)

http://blogs.dotnethell.it/suxstellino
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5