Domanda

Vorrei utilizzare SSIS per creare esportazioni di file flat tabella di database, quindi importarle in installazioni di SQL Express distribuite variamente distribuite. Come puoi immaginare, SSIS non è disponibile nella versione Express. Quando faccio l'inserto di massa, erro con:

Msg 4866, Level 16, State 8, Line 1 The bulk load failed. The column is too long in the data file for row 1, column 5. Verify that the field terminator and row terminator are specified correctly.

Il file generato è ASCII (1252) con char (09) (tab) tra campi e char (0d) char (0a) che termina una riga (penso che sia r n).

Questo è il file di formato (4 ° col è larghezza di col):

9.0
5
1 SQLCHAR 0 12 "\t" 1 Record_ID ""
2 SQLCHAR 0 498 "\t" 2 Filename SQL Latin1 General CP1 CI AS
3 SQLCHAR 0 498 "\t" 3 Path SQL Latin1 General CP1 CI AS
4 SQLCHAR 0 12 "\t" 4 Width ""
5 SQLCHAR 0 12 "\r\n" 5 Height ""

I dati di esempio a partire dalla parte superiore del file:

Record_ID Filename Path Width Height
1437 BreadCakeCooknPie.eps G:\BakedGoods\BreadCakeCooknPie.eps 595 647
1438 CakeChocolateRoses.eps G:\BakedGoods\CakeChocolateRoses.eps 1200 848

Lo importa con il seguente codice T-SQL:

bulk insert item_table from 'Item_Table.txt' with
( FORMATFILE='Item_Table.fmt', FIRSTROW=2)

I campi da tavolo sono:

[Record_ID] [int] NULL,
[Filename] [nvarchar](249) NULL,
[Path] [nvarchar](249) NOT NULL,
[Width] [int] NULL,
[Height] [int] NULL

Eventuali scritti disponibili? Qualche idea su come correggere l'errore? Qualche idea su come afferrare il file di formato creato da SSIS? Qualche altra idea?

Grazie mille per aver considerato la mia domanda.

È stato utile?

Soluzione 3

Questa è una risposta parziale. Apparentemente, è possibile iniziare con BCP, farlo generare un file di formato e un dump di dati di testo, utilizzare il file di formato da BCP e abbinare l'esportazione di testo esattamente in SSIS. La disposizione del campo fisico nel file di dati (anche se puoi ordinarli nel file di formato) e nessun campo mancante (anche se non ne hai bisogno) sembrano essere la chiave.

Ho dovuto effettuare manualmente i metadati di esportazione di testo corrispondente al file di formato (digitato a mano i meta dati in colonne nel gestore della connessione del file di testo). Ciò ha causato l'ordine fisico dei campi nel file di testo per corrispondere all'ordine fisico nella tabella (ho usato la colonna del file di formato per corrispondere prima, che non sembrava funzionare).

Il contenuto esportato da SSIS non è ancora lo stesso, ma abbastanza vicino da importare. Ad esempio, quando BCP ha esportato i dati, metteva .000 dietro campi da data e .0 dietro campi numerici (galleggiante, ecc.).

Il mio file di formato finale che ha funzionato è di seguito. Si noti che tutti i campi sono sqlchar anche se alcuni sono unicode, che tutte le dimensioni sono sbagliate (int è 10 ma ha 12), (il testo è di 249 lunghezza ma ha 498) e (ho dovuto mettere tutti i campi , non solo quelli che volevo importare. Non saltava correttamente i campi.)

Mondo pazzo. Qualche idea per cui sarebbe così?

9.0
29
1 SQLCHAR 0 12 "\t" 1 Record_ID ""
2 SQLCHAR 0 498 "\t" 2 Filename SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 498 "\t" 3 Path SQL_Latin1_General_CP1_CI_AS
4 SQLCHAR 0 498 "\t" 4 Extension_Win SQL_Latin1_General_CP1_CI_AS
5 SQLCHAR 0 498 "\t" 5 Short_Filename_Win SQL_Latin1_General_CP1_CI_AS
6 SQLCHAR 0 498 "\t" 6 Volume SQL_Latin1_General_CP1_CI_AS
7 SQLCHAR 0 24 "\t" 7 Created ""
8 SQLCHAR 0 24 "\t" 8 Last_Modified ""
9 SQLCHAR 0 24 "\t" 9 Cataloged ""
10 SQLCHAR 0 24 "\t" 10 Last_Updated ""
11 SQLCHAR 0 12 "\t" 11 File_Size ""
12 SQLCHAR 0 498 "\t" 12 Mac_File_Type SQL_Latin1_General_CP1_CI_AS
13 SQLCHAR 0 498 "\t" 13 Mac_Creator SQL_Latin1_General_CP1_CI_AS
14 SQLCHAR 0 498 "\t" 14 Mac_Zone SQL_Latin1_General_CP1_CI_AS
15 SQLCHAR 0 12 "\t" 15 Thumbnail_Size ""
16 SQLCHAR 0 12 "\t" 16 Color_Mode ""
17 SQLCHAR 0 30 "\t" 17 Horizontal_Resolution ""
18 SQLCHAR 0 30 "\t" 18 Vertical_Resolution ""
19 SQLCHAR 0 12 "\t" 19 Width ""
20 SQLCHAR 0 12 "\t" 20 Height ""
21 SQLCHAR 0 12 "\t" 21 MultipageCount ""
22 SQLCHAR 0 12 "\t" 22 PlaceHolder ""
23 SQLCHAR 0 12 "\t" 23 Watermarked ""
24 SQLCHAR 0 12 "\t" 24 FileStoreID ""
25 SQLCHAR 0 498 "\t" 25 Directory_Path SQL_Latin1_General_CP1_CI_AS
26 SQLCHAR 0 12 "\t" 26 RID ""
27 SQLCHAR 0 498 "\t" 27 Cataloged_By SQL_Latin1_General_CP1_CI_AS
28 SQLCHAR 0 498 "\t" 28 Updated_By SQL_Latin1_General_CP1_CI_AS
29 SQLCHAR 0 0 "\r\n" 29 File_Description SQL_Latin1_General_CP1_CI_AS

Altri suggerimenti

Questo non riesce alla parte di origine del flusso di dati? Puoi pubblicare i meta dati relativi alla fonte? Ho trovato occasionalmente con file flat SSIS non stima correttamente le dimensioni o i tipi di dati sulla connessione Flat File. Quando ciò accade, un'attività di flusso di dati non riuscirà alla parte di origine dell'importazione non appena incontra i dati che superano la lunghezza della connessione del file piatto previsto nella posizione.

Questo non riesce alla parte di destinazione del flusso di dati? In tal caso, funziona almeno se si utilizza un lettore di dati come destinazione anziché la tabella di destinazione effettiva? Immagino che il tuo problema sia all'inizio della pipeline, ma se sta superando la parte di origine del flusso di dati, potresti essere in grado di isolare almeno il problema come problema di destinazione.

Facci sapere dove si sta effettivamente rompendo il flusso di dati.

Hai preso in considerazione l'esecuzione dell'esportazione di SSIS in un formato delimitato da pipa o virgola? Potrebbero esserci problemi con il modo in cui il personaggio della scheda viene elaborato tra esportazione e importazione.

Tutto ciò che hai disposto qui non sembra indicare un problema con SSIS o inserimento di massa, solo qualcosa con il formato del file stesso.

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