Domanda

Qualcuno è riuscito a ottenere un file di testo con lunghezza record variabile (CSV) in SQL Server tramite SSIS?

Ho provato più volte a inserire un file CSV in una tabella SQL Server, utilizzando SSIS, dove il file di input ha lunghezze di record variabili.Per questa domanda, le due diverse lunghezze dei record sono 63 e 326 byte.Tutte le lunghezze dei record verranno importate nella stessa tabella con larghezza di 326 byte.

Ci sono oltre 1 milione di record da importare.
Non ho alcun controllo sulla creazione del file di importazione.
Devo usare SSIS.
Ho confermato con MS che questo è stato segnalato come bug.Ho provato diverse soluzioni alternative.Nella maggior parte dei casi ho provato a scrivere codice personalizzato per intercettare il record e non riesco a farlo funzionare come voglio.

È stato utile?

Soluzione

Ho riscontrato un problema simile e ho utilizzato codice personalizzato (attività script) e un componente script nella scheda Flusso di dati.

Ho un'origine file flat che viene inserita in un componente script.All'interno utilizzo il codice per manipolare i dati in entrata e sistemarli per la destinazione.

Il mio problema era che il provider utilizzava "000000" poiché non era disponibile una data e un'altra colonna presentava un problema di riempimento/rifinitura.

Altri suggerimenti

Non dovresti avere problemi a importare questo file.Assicurati solo di selezionare la gestione connessione file flat Delimitato formato, quindi impostare la lunghezza della colonna SSIS sulla lunghezza massima della colonna del file in modo che possa contenere qualsiasi dato.

Sembra che tu stia utilizzando il formato a larghezza fissa, che non è corretto per i file CSV (poiché hai una colonna a lunghezza variabile), o forse hai impostato in modo errato il delimitatore di colonna.

Stesso problema.Nel mio caso, il file CSV di destinazione ha record di intestazione e piè di pagina con formati completamente diversi dal corpo del file;l'intestazione/piè di pagina vengono utilizzati per convalidare la completezza dell'elaborazione del file (data/ora, conteggi dei record, totali degli importi - "checksum" con qualsiasi altro nome ...).Questo è un formato comune per i file provenienti da ambienti "mainframe" e, sebbene non l'abbia ancora iniziato, prevedo di dover utilizzare lo scripting per eliminare l'intestazione/piè di pagina, salvare il resto come un nuovo file, elaborare il nuovo file, quindi eseguire la convalida.Non posso esattamente aspettarmi che la SM lo abbia fuori dagli schemi (ma sicuramente sarebbe carino, no?).

È possibile scrivere un'attività di script utilizzando C# per scorrere ogni riga e riempirla con la quantità corretta di virgole per completare i dati.Ciò presuppone, ovviamente, che tutti i dati siano allineati con le colonne corrette.

Cioè.mentre leggi ogni record, puoi "contare" il numero di virgole.Quindi, aggiungi semplicemente un numero X di virgole alla fine del record finché non avrà il numero corretto di virgole.

Excel presenta un problema che causa la creazione di questo tipo di file durante la conversione in CSV.

Se puoi farlo "a mano", il modo migliore per risolverlo è aprire il file in Excel, creare una colonna alla "fine" del record e riempirla fino in fondo con 1s o qualche altro carattere.

Brutto, ma può essere una soluzione rapida.

Se non hai la possibilità di farlo, puoi fare la stessa cosa a livello di codice come descritto sopra.

Perché non puoi semplicemente importarlo come file di prova e impostare il delimitatore di colonna su "," e il delimitatore di riga su CRLF?

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