2013-03-21 24 views
23

Ho un pacchetto ssis in cui sto utilizzando una sorgente OLEDB che collega alla tabella di SQL Server 2005. Tutte le colonne tranne una colonna di date sono NVARCHAR (255). Sto utilizzando una destinazione di Excel e utilizzo di un'istruzione SQL per creare il foglio nella cartella di lavoro di Excel, l'SQL si trova nel gestore della connessione excel (in pratica un'istruzione della tabella di creazione che crea un foglio) ed è derivato dalla mappatura delle colonne dal DB.Conversione SSIS tra errore Unicode e non Unicode

Non importa cosa ho fatto Continuo a ricevere questo unicode -> errore di conversione non Unicode tra la mia fonte e destinazione. Provata conversione in stringa [DT_STR] tra S> D, rimossa, modificata SQL Table VARCHAR in NVARCHAR e otteniamo ancora questo errore flippin.

Poiché sto creando il foglio in Excel con un'istruzione SQL, non vedo alcun modo di pre-definire effettivamente quali saranno i tipi di dati delle colonne nel foglio Excel. Immagino che sarebbe un meta dati predefinito, ma non lo so.

Quindi tra la mia destinazione tabella SQL e la creazione del mio foglio Excel con questa istruzione sql SSIS come posso interrompere questo errore?

Il mio errore è:

errore al flusso di dati Task [origine OLE DB [1]]: Colonna "MyColumn" non può conversione tra i tipi di dati stringa Unicode e non Unicode.

E per tutte le colonne nvarchar.

Apprezzo tutto l'aiuto

Grazie

Andrew

+5

è necessario utilizzare 'dati Conversion' per convertire' non unicode' a 'unicode' perché Excel riconosce solo' dati unicode' – praveen

+0

eliminata la parte di conversione del pacchetto SSIS, eliminata la destinazione ed Excel connessione, incluso l'eliminazione del foglio creato dall'SQL nella cartella di lavoro e riavviato. ora va bene con gli errori – Andrew

+0

Come ho detto, la conversione ha funzionato bene ora. Da quello che ho capito il tipo di colonna di dati SQL è NVARCHAR un tipo Unicode quindi non è necessario la conversione. – Andrew

risposta

42

Aggiungere trasformazioni Conversione dati per convertire colonne di stringhe da non Unicode (DT_STR) per Unicode (DT_WSTR) stringhe.

Hai bisogno di fare questo per tutte le colonne di stringa ...

+17

Funziona ma dovrebbe essere presente un avviso/disclaimer "Tunnel carpale" allegato alla risposta. –

+2

Biml sarebbe utile in questo caso @ pokerplayer23 – gazma

10
  1. In primo luogo, aggiungere un blocco di conversione dati nel diagramma di flusso di dati.

  2. Aprire il blocco di conversione dati e selezionare la colonna per cui viene visualizzato l'errore. Sotto cambia il suo tipo di dati in stringa unicode (DT_WSTR) o qualunque tipo di dati è previsto e salvo.

  3. Passare al blocco di destinazione. Vai a mappare in esso e mappare l'elemento appena creato al suo indirizzo corrispondente e salvare.

  4. Fare clic con il pulsante destro del mouse sul progetto nella proprietà explorer.select di soluzione. Seleziona le proprietà di configurazione e seleziona il debug al suo interno. In questo, imposta l'opzione Run64BitRunTime su false (dato che Excel non gestisce molto bene l'applicazione a 64 bit).

16

i passaggi qui sotto ha lavorato per me:

1). tasto destro del mouse sull'attività di origine.

2). clicca su "Mostra editor avanzato". advanced edit option for source task in ssis

3).Vai alla scheda "Proprietà di input e output".

4). seleziona la colonna di output per la quale stai ricevendo l'errore.

5). Il suo tipo di dati sarà "String [DT_STR]".

6). Cambia quel tipo di dati in "Unicode String [DT_WSTR]". Changing the data type to unicode string

7). salva e chiudi. Spero che questo aiuti!

1

Nell'esempio precedente ho continuato a perdere i valori, penso che il ritardo della convalida consentirà di salvare i nuovi tipi di dati come parte dei metadati.

Nella gestione connessione per 'Excel Connection Manager' impostare la convalida del ritardo su False dalle proprietà.

Quindi sul flusso di dati Attività di destinazione per Excel, impostare ValidationExternalMetaData su False, nuovamente dalle proprietà.

Questo ora consente di fare clic con il pulsante destro del mouse sull'attività di destinazione di Excel e andare su Editor avanzato per Destinazione di Excel -> scheda all'estrema destra - Proprietà di input e di output. Nella sezione della cartella Colonne esterne sarà ora possibile modificare i tipi di dati e i valori di lunghezza delle colonne problematiche e questo può ora essere salvato.

Buona fortuna!

0

Ho avuto lo stesso problema e ho provato tutto scritto qui, ma mi stava ancora dando lo stesso errore. È risultato essere il valore NULL nella colonna che stavo cercando di convertire.

La rimozione del valore NULL ha risolto il problema.

Cheers, Ahmed

0

ho sperimentato questa condizione, quando avevo installato la versione Oracle 12 client a 32 bit client collegato ad un Oracle Server 12 in esecuzione su Windows. Sebbene sia la destinazione Oracle-source che quella SqlServer NON siano Unicode, ho ricevuto questo messaggio, come se le colonne Oracle fossero Unicode. Ho risolto il problema inserendo una casella di conversione dati e selezionando il tipo DT-STR (non unicode) per i campi varchar2 e DT-WSTR (unicode) per i campi numerici, quindi ho abbandonato il 'COPY OF' dal campo di output nome. Nota che ho ricevuto l'errore perché avevo collegato la freccia della casella di origine con la casella di conversione PRIMA di impostare i tipi di conversione. Quindi ho dovuto cambiare casella sorgente e questo ha pulito tutti gli errori nella casella di destinazione.

0

Invece di aggiungere una precedente conversione suggerita è possibile eseguire il cast della colonna nvarchar su una colonna varchar. Questo ti impedisce di avere un passaggio non necessario e ha prestazioni più elevate rispetto all'alternativa.

Nella scelta dell'istruzione SQL sostituire date con CAST(date AS varchar([size])). Per qualche motivo questo non modifica ancora il tipo di dati di output. Per fare questo procedere come segue:

  1. Fare clic destro tua origine OLE DB passo e aprire l'editor avanzato.
  2. andare alle proprietà di ingresso e uscita
  3. Seleziona colonne di output
  4. Selezionare la colonna
  5. In Tipo di dati Modificare le proprietà DataType a string [DT_STR]
  6. cambiamento di lunghezza per la lunghezza specificata nel vostro CAST statement

Dopo aver eseguito questa operazione, i dati di origine verranno emessi come varchar e il tuo errore scomparirà.

Source

0

Il pezzo mancante ecco Data Conversion oggetto. Dovrebbe essere tra l'origine OLE DB e l'oggetto destinazione.

enter image description here