¿Cómo exportar los datos SSIS en el estándar SQL e importar con inserción masiva en SQL Express?

StackOverflow https://stackoverflow.com/questions/734943

Pregunta

Me gustaría usar SSIS para crear exportaciones de archivos planos de la tabla de bases de datos y luego importarlas en instalaciones SQL Express distribuidas de manera diversa. Como puede adivinar, SSIS no está disponible en la versión Express. Cuando hago el inserto a granel, se equivoca 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.

El archivo generado es ASCII (1252) con char (09) (tab) entre campos y char (0d) char (0a) que finaliza una línea (creo que es r n).

Este es el archivo de formato (4to col es el ancho de 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 ""

Los datos de muestra que comienzan desde la parte superior del archivo:

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 importo con el siguiente código T-SQL:

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

Los campos de mesa son:

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

¿Algún artículo disponible? ¿Alguna idea de cómo corregir el error? ¿Alguna idea de cómo tomar el archivo de formato creado por SSIS? ¿Alguna otra idea?

Muchas gracias por considerar mi pregunta.

¿Fue útil?

Solución 3

Esta es una respuesta parcial. Aparentemente, puede comenzar con BCP, hacer que genere un archivo de formato y un volcado de datos de texto, usar el archivo de formato de BCP y coincidir con la exportación de texto exactamente en SSIS. La disposición de campo físico en el archivo de datos (a pesar de que puede ordenarlos en el archivo de formato) y no hay campos faltantes (incluso si no los necesita) parecen ser la clave.

Tuve que hacer que el texto exportara los metadatos de exportación coincidiera con el archivo de formato (la mano escribía los meta datos en columnas en el administrador de conexión del archivo de texto). Esto provocó que el orden físico de los campos en el archivo de texto coincida con el orden físico en la tabla (utilicé la columna del archivo de formato para que coincidan antes, lo que no parecía funcionar).

El contenido exportado desde SSIS todavía no es el mismo, sino lo suficientemente cerca como para importar. Por ejemplo, cuando BCP exportó los datos, puso .000 detrás de los campos de fecha y .0 detrás de los campos numéricos (flotador, etc.).

Mi archivo de formato final que funcionó está a continuación. Observe que todos los campos son sqlchar a pesar de que algunos son unicodeos, que todos los tamaños son incorrectos (int es 10 pero tiene 12) (el texto es de 249 longitud pero tiene 498) y (tuve que poner todos los campos en , no solo los que quería importar. No se omitió los campos correctamente).

Mundo loco. ¿Alguna idea de por qué este sería el caso?

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

Otros consejos

¿Está fallando esto en la parte de origen del flujo de datos? ¿Puede publicar los meta datos relacionados con la fuente? Encontré ocasionalmente con archivos planos, SSIS no estimula los tipos o tipos de datos correctamente en la conexión de archivo plano. Cuando esto sucede, una tarea de flujo de datos fallará en la parte de origen de la importación tan pronto como encuentre datos que excedan la longitud de la conexión de archivo plano esperada en la posición.

¿Está fallando en la parte de destino del flujo de datos? Si es así, ¿al menos funciona si usa un lector de datos como destino en lugar de la tabla de destino real? Supongo que su problema está antes en la tubería, pero si está más allá de la parte de origen del flujo de datos, entonces puede al menos aislar el problema como un problema de destino.

Háganos saber dónde está realmente rompiendo en el flujo de datos.

¿Ha considerado ejecutar su exportación SSIS en un formato delimitado por tubería o coma? Podría haber problemas con cómo se procesa el carácter de pestaña entre la exportación y la importación.

Todo lo que ha presentado aquí no parece señalar un problema con SSIS o inserción a granel, solo algo con el formato del archivo en sí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top