Domanda

Ho un origine file flat con valori come 24.209991, ma hanno bisogno di caricare a SQL Server come tipo di soldi.In DTS (che sto convertendo da), il valore viene attraverso come 24.21.Come faccio a convertire il campo SSIS?

Ora, io sono solo cambiare il tipo da DT_STR per DT_CY e si dà un errore di esecuzione di 'conversione di Dati non riuscita.La conversione di dati per la colonna "Col003" restituito il valore di stato 2 e il testo di stato "Il valore non può essere convertito a causa di una potenziale perdita di dati.".'

Si utilizzano I Dati delle attività di Conversione?E poi che cosa?

Ho provato anche impostando la sorgente colonna di output per DT_NUMERIC, e quindi la conversione che per DT_CY, con lo stesso risultato.

Ho anche provato ad utilizzare le Colonne Derivate, casting DT_STR campo Col003 a (DT_NUMERIC,10,2)Col003 e poi colata che (DT_CY)Col003_Numeric.Che sta ottenendo un cast di errore.

È stato utile?

Soluzione

Il file flat è le impostazioni predefinite a tutti i campi come dt_str. Utilizzare l'opzione avanzata durante la modifica della connessione per avere il campo numerico come float (DT_R4). Quindi, nella modifica avanzata dell'origine del file flat (nella scheda Flusso di dati), impostare quella colonna di output su denaro (DT_CY).

Quindi, il campo si convertirà senza ulteriori conversioni. Il problema era lasciare la definizione del file di origine come dt_str.

Altri suggerimenti

Se non hai alcuna conversione dei dati, e assicurati di non avere un carattere divertente (ad es. US $ 200 Produce Errore)

Se hai campi null o vuoti nel tuo campo e stai utilizzando l'origine del file flat, assicurati di spuntare "Restituisci il valore null dalla sorgente .."

Un altro trucco che ho usato è qualcosa di simile: (taxvalue != "" ? taxvalue : NULL(DT_WSTR,50)). Nella trasformazione della colonna derivata (puoi semplicemente sostituire il campo)

Generalmente SSIS non converte correttamente le stringhe vuote in denaro.

Per qualche ragione, nel mio scenario, il OLE DB Destination in realtà era configurato per accettare una DT_CY.Tuttavia, il casting per questo formato (non importa la lunghezza dell'input e i dati di destinazione, e non importa se o non i dati NULL quando è arrivato) sempre causato lo stesso problema.

Dopo l'aggiunta di dati di spettatori, posso concludere che questo ha qualcosa a che fare con la lingua.Qui in Danimarca, possiamo usare la virgola (,) come decimale delimitatori e punti (.) come migliaia di delimitatori, anziché il contrario.

Questo significa che un numero enorme come 382,939,291,293.38 sarebbe (dopo la conversione DT_CY assomigliare a 382.939.291.293,38.Anche se ho fortemente dubitato che potesse essere il problema, ho deciso di fare il di fronte di quello che mi aveva originariamente previsto.

Ho deciso di andare alle impostazioni avanzate del mio OLE DB Destination e cambiare il DT_CY colonna del tipo di DT_STR invece.Poi, ho aggiunto un Derived Column trasformazione, e inserito il seguente espressione per trasformare la colonna prima i dati arrivano a destinazione.

REPLACE(SUBSTRING(Price, 2, 18), ",", ".") dove Price era la colonna del nome.

Con mia grande sorpresa, questo ha risolto il problema, dal momento che ho capito che il mio OLE DB Destination era ora che invia i dati come una stringa SQL Server capito perfettamente bene.

Sono certo che questo è un bug!Io sto usando SQL Server 2008, quindi potrebbe essere stato risolto nelle versioni successive.Tuttavia, mi trovo molto critico che tale cosa essenziale è non funziona correttamente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top