2012-10-24 8 views

risposta

16

Si potrebbe anche voler controllare la possibilità di mantenere Null valori sia sulla connessione di origine che di destinazione (se disponibile)

+3

Questo non è il punto! Punto è come gestire o sostituire NULL valori. Ho provato il tuo suggerimento ma non funziona. Dovrebbe esserci un'espressione per sostituire i valori vuoti con valori NULL o definiti dall'utente –

+1

Beh, penso che tu abbia ragione. Se questo è un file Flat, esiste un'opzione sull'origine file flat per mantenere valori nulli. Avere abilitato così come l'opzione "Mantieni valori NULL" sulla connessione di destinazione (come OLEDB) potrebbe eliminare la necessità di sostituirlo utilizzando la trasformazione della colonna Derivata. – Thony

+0

Hmm !!! Bene, ho Excel come fonte. Excel contiene alcune celle vuote e quando le carico in DB, restituisce NULL. Ho provato a usare expression (Conditional Split) ma non funziona. Incollerò il mio errore il prima possibile. –

6

Forse si è tentato qualcosa di simile (in ipotesi tipo di dati è di corda/varchar):

LEN(TRIM([ColumnName]))==0 ? NULL(DT_WSTR, 10) : [ColumnName] 
+0

Ho provato questo ma non è stringa è data non possiamo usare ltrim per la data ...... :( –

+0

quindi rimuovere assetto ..... utilizzare direttamente LEN funzione –

35

In componente DerivedColumn uso DataFlow.

Sostituire la colonna e nell'espressione mettere questa riga di codice

ColumnName == "" ? NULL(DT_WSTR,50) : ColumnName

Si farà in modo di restituire null se colonna è vuota

+0

Possiamo usare questa espressione senza avere una colonna derivata? –

+0

Possiamo sostituire la stessa colonna più volte di seguito senza utilizzare un'altra derivata o una formula più complessa? – Hybris95

1

Avevo un'istanza simile in cui volevo sostituire una stringa in una colonna di data in NULL e ho utilizzato il seguente codice:

LEN (your_data) < 2? NULL (DT_WSTR, 50): your_data

In questo caso, la stringa aveva una lunghezza di solo 1. Ho quindi utilizzato la trasformazione della conversione dei dati per ottenere il tipo dt_dbtimestamp.

Spero che questo aiuti!

1

Fix per il problema di cui sopra :::::

origine e destinazione must controllato con l'opzione Consenti valori nulli e funzionerà.

+0

Nel mio caso stavo usando una sorgente di file flat e l'opzione sotto "Connection Manager" di sinistra era una casella di controllo "Mantieni valori null dall'origine come valori nulli nel flusso di dati" – PeterVermont

0

È necessario utilizzare il componente Colonna derivata e un'espressione condizionale. Poiché si tratta di un'istruzione condizionale, i tipi di dati dovranno essere gli stessi per creare un risultato booleano.

Prova ad usare questo:

ColumnName == (DT_DATE)"" ? NULL(DT_DATE) : ColumnName 
Problemi correlati