Il valore non può essere convertito a causa di una potenziale perdita di dati [chiuso]


12

Vorrei iniziare chiarendo che questa non è una domanda duplicata , né un potenziale duplicato per quella materia. Ho provato a implementare ogni risposta a ogni singola variante già esistente di questo problema su StackOverflow e DBA Stack Exchange, senza alcuna fortuna.

Ho avuto problemi con questo problema negli ultimi due giorni (lavorando su di esso per circa 7 ore al giorno), e anche dopo aver cercato su Google il problema, sembra che nessun altro abbia la stessa variante esatta del mio problema.

Cosa sto cercando di fare?

In SSIS, sto provando a leggere da un file CSV e inserisco le righe da esso in un database OLE DB. Per questo, ho realizzato la configurazione più semplice di sempre, vista sotto.

  1. Flat File Source - legge le righe CSV.
  2. Derived Column - attualmente non fa nulla (è lì solo per sperimentare).
  3. Data Conversion - attualmente non fa nulla (è lì solo per sperimentare).
  4. OLE DB Destination - memorizza le righe nel database.

Quando provo a eseguirlo, interrompe l'esecuzione nella mia destinazione OLE DB con il seguente messaggio di errore.

Si è verificato un errore con la colonna di input "Quantità" (187) sull'input "Input destinazione OLE DB" (51). Lo stato della colonna restituito era: "Impossibile convertire il valore a causa di una potenziale perdita di dati".

La colonna che non riesce ( Amount) è attualmente di tipo DT_STR. Sembra essere il tipo in cui ho più fiducia in questo momento.

Che cosa ho provato?

  • Ho provato a utilizzare la funzione Flat File Connection"Suggerisci tipi" sulla colonna che non funziona. Ciò ha reso raccomandare il Single byte signed inttipo di dati.
    • Si ferma alla mia fonte di file flat .
    • L'errore è la conversione dei dati non riuscita. La conversione dei dati per la colonna "Importo" ha restituito il valore di stato 2 e il testo di stato "Impossibile convertire il valore a causa di una potenziale perdita di dati".
  • Ho provato a usare il Derived Columnper lanciare la colonna in a DT_I4.
    • Si ferma alla mia colonna derivata .
    • L'errore è la conversione dei dati non riuscita. La conversione dei dati per la colonna "Importo" ha restituito il valore di stato 2 e il testo di stato "Impossibile convertire il valore a causa di una potenziale perdita di dati".
  • Ho provato a usare il Data Conversionper trasmettere il valore della mia colonna a a DT_I4.
    • Si ferma al mio Data Conversion.
    • L'errore è la conversione dei dati non riuscita. La conversione dei dati per la colonna "Importo" ha restituito il valore di stato 2 e il testo di stato "Impossibile convertire il valore a causa di una potenziale perdita di dati".
  • Ho provato a cambiare la lunghezza del mio DT_STRvalore nella sorgente e nella destinazione.
    • Si ferma alla fonte o alla destinazione in base alle impostazioni.
  • Ho provato a connettermi utilizzando un connettore di origine Excel invece con e senza l' IMEX=1aggiunta alla stringa di connessione. Senza fortuna.

Il mio senso della programmazione mi dice che sono fregato. Non ho mai mai incontrato un grosso problema per una cosa così semplice.

E perché non posso semplicemente ignorare la "potenziale" perdita di dati? È davvero frustrante dire il minimo.

Il mio sistema

È una macchina Windows Server 2008 R2 con SQL Server 2008 installato. La macchina stessa viene completamente aggiornata tramite Windows Update.


Sembra che ho avuto questo problema con un valore (anche se tirando da Access) e ho dovuto usare una tabella codici specifica quando ho lanciato la colonna. Non ho più accesso al pacchetto SSIS per verificare cosa ho fatto però.

Qual è il tipo di dati della colonna in cui stai cercando di inserire Amount?
Jon of All Trades

2
Apri Gestione file flat per CSV. Vai alla scheda Avanzate e seleziona la Amountcolonna. Scatta una schermata e aggiorna la tua domanda con questa immagine.
billinkc,

Hai avuto l'opportunità di consultare Connection Manager?
billinkc,

1
Non credo che tu sia fregato ma senza vedere la definizione di Connection Manager, è impossibile dirlo.
billinkc,

Risposte:


3

Mi sono imbattuto in questo alcune volte e il problema è stato una mancata corrispondenza dei tipi di dati nei parametri di esportazione / importazione. La prima cosa da fare è controllare quei parametri facendo clic con il tasto destro sull'origine o destinazione, selezionando Editor avanzato. Vai su Proprietà input e output e controlla il tipo di dati per quella colonna per tutti gli elementi - sia esterno, output e input. Di solito ho visto una varianza qui, spesso volte uno è Unicode (WSTR) e l'altro I4 o DSTR.


8

Ignorando l'errore

Prima di tutto, dovresti essere in grado di ignorare il troncamento della stringa andando alla tua sorgente di file flat, all'output dell'errore e quindi cambiando "Fail Component" in "Troncamento" in "Ignora errore".

Soluzione migliore

Il vero problema potrebbe essere che la lunghezza della stringa all'interno della pipeline SSIS è ancora errata perché è stata inizializzata in un punto precedente.

Puoi determinare se questo è il caso facendo doppio clic sulla freccia verde dall'origine del file flat (o dopo la conversione di colonne / dati derivati) e scegliendo "Meta data". Lì puoi vedere la lunghezza del campo all'interno della pipeline.

Se hai visto spesso che i metadati non corrispondono più al componente di origine, soprattutto se si crea l'origine del file flat E la sua connessione corrispondente tramite la procedura guidata.

Il mio suggerimento sarebbe quello di eliminare la connessione e l'origine file flat e ricrearli poiché non ho trovato un modo per ri-sincronizzare i metadati della pipeline con i componenti di origine.


2
Tuttavia, ciò non rientra nel "troncamento". L'ho già provato.
Mathias Lykkegaard Lorenzen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.