2012-04-23 149 views

Respuesta

51

Aquí hay un paquete de muestra creado usando SSIS 2008 R2 que explica cómo importar un archivo plano en una tabla de base de datos.

  • Cree un archivo plano de ancho fijo denominado Fixed_Width_File.txt con datos como se muestra en la captura de pantalla. La captura de pantalla usa Notepad ++ para mostrar el contenido del archivo. Tiene la capacidad de mostrar los caracteres especiales, como retorno de carro y avance de línea. CR LF indica los delimitadores de fila Retorno de carro y Alimentación de línea.

Flat file data

  • En la base de datos del servidor SQL, cree una tabla llamada dbo.FlatFile con el script crear previsto en secuencias de comandos SQL sección.

  • Cree un nuevo paquete SSIS y agregue un nuevo administrador de conexión OLE DB que se conectaría a la base de datos de SQL Server. Supongamos que el administrador de conexión OLE DB se llama SQLServer.

Connection manager

  • En la ficha flujo de control del paquete, coloque un datos Flujo de tareas.

Data flow task

  • doble clic en la tarea de flujo de datos y usted será llevado a la pestaña de flujo de datos. En la pestaña de flujo de datos, coloque un fuente de archivo plano. Haga doble clic en el archivo fuente sin formato y aparecerá el Editor de fuente de archivo plano. Haga clic en el botón Nuevo para abrir Editor de administrador de conexión de archivos planos.

  • En la sección General del Editor de origen de archivos planos , introduzca un valor en nombre del gestor de conexión (digamos Fuente) y vaya a la ubicación de archivos planos y seleccione el archivo. Este ejemplo usa el archivo de muestra en la ruta C:\temp\Fixed_Width_File.txt Si tiene filas de encabezado en su archivo, puede ingresar un valor 1 en las filas del encabezado para saltear el cuadro de texto y omitir la fila del encabezado.

Flat file connection manager editor General

  • Haga clic en las columnas sección. Cambie la fuente de acuerdo con su elección. Escogí Courier New para poder ver más datos con menos desplazamiento. Ingrese el valor 69 en el cuadro de texto Ancho de fila. Este valor es la suma del ancho de todas sus columnas + 2 para el delimitador de filas. Una vez que haya establecido el ancho de fila correcto, debería ver los datos del archivo de ancho fijo correctamente en la sección de columnas de datos de origen. Ahora, debe hacer clic en las ubicaciones apropiadas para determinar los límites de la columna. Tenga en cuenta las secciones 4, 5, 6 y en la captura de pantalla siguiente.

Flat file connection manager editor Columns

  • Haga clic en la sección deavanzada. Notará 5 columnas creadas para usted automáticamente en función de los límites de columna que establecemos en la sección Columnas en el paso anterior. La quinta columna es para el delimitador de filas.

Flat file connection manager editor Advanced

  • Cambiar el nombre de los nombres de columna como FirstName, LastName, Id, Date y RowDelimiter

Flat file connection manager editor Advanced Renamed

  • Por defecto, las columnas serán s et con DataType string [DT_STR]. Si estamos bastante seguros de que una determinada columna será de un tipo de datos diferente, podemos configurarla en la sección Avanzado. Vamos a cambiar Id columna para que sea del tipo de datos y la columna Fecha four-byte signed integer [DT_I4] ser del tipo de datos date [DT_DATE]

Flat file connection manager editor Advanced Id column

Flat file connection manager editor Advanced Date column

  • Haga clic en la sección devista previa. Los datos se mostrarán según la configuración de la columna.

Flat file connection manager editor Preview

  • Haga clic en OK en el editor de administrador de conexión de archivos planos y la conexión de archivos planos serán asignados a la origen de archivo plano en la tarea de flujo de datos.

Flat file editor connection

  • En el origen de archivos planos Editor, haga clic en la sección Columnas. Notará las columnas que se configuraron en el administrador de conexión de archivos sin formato. Desmarque RowDelimiter porque no lo necesitaremos.

Flat file editor columns

  • En la tarea de flujo de datos, coloque una OLE DB Destination. Conecte la salida del origen de archivo plano al destino OLE DB.

Data flow task

  • En el Editor de destino de OLE DB, seleccione el Gestor de conexiones OLE DB nombrado SQLServer y establecer el Nombre de la tabla o la caída de vista a [dbo].[FlatFile]

OLE DB Destination connection

  • En el Editor de destino OLE DB, haga clic en la sección Asignaciones. Dado que los nombres de columna en el administrador de conexión de archivos planos son los mismos que las columnas en la base de datos, la asignación se realizará automáticamente. Si los nombres son diferentes, debe mapear manualmente las columnas. Haga clic en Aceptar.

OLE DB Destination columns

  • Ahora el paquete está listo. Ejecute el paquete para cargar los datos de archivo sin formato de ancho fijo en la base de datos.

Package execution

  • Si se consulta la tabla dbo.FlatFile en la base de datos, se dará cuenta de los datos de archivos planos importados en la base de datos.

Data imported into table

Esta muestra debe darle una idea acerca de cómo importar archivos de ancho fijo plana en la base de datos. No explica cómo manejar el registro de errores, pero esto debería ayudarlo a comenzar y ayudarlo a descubrir otras características relacionadas con SSIS cuando juegue con paquetes.

Espero que ayude.

SQL Scripts:

CREATE TABLE [dbo].[FlatFile](
    [Id] [int] NOT NULL, 
    [FirstName] [varchar](25) NOT NULL, 
    [LastName] [varchar](25) NOT NULL, 
    [Date] [datetime] NOT NULL 
) 
+1

Esto no tenía ninguna relación con mi problema actual, pero aún así he votado solo por haber hecho un gran trabajo. – SteveCav

1

En la transformación columna derivada puede utilizar la función SUBSTRING() para cada uno de la columna. Ejemplo:

Columnas DerivedColumn

FirstName SUBSTRING (Data, startFrom, longitud);

Aquí el Nombre tiene un ancho 25, por lo que si consideramos que desde la posición 0, entonces en la columna derivada debe especificarlo dando SUBCADENA (Datos, 0, 25);

Similarmente para otras columnas.

1

Muy bien explicado, Siva! Su tutorial y excelentes ilustraciones señalan lo que debería haber hecho Microsoft clara

  1. que la anchura de una fila de longitud fija tiene que incluir los caracteres de retorno de carro y avance de línea (CR & LF) (que me di cuenta, ya la vista previa mostró que las filas no estaban alineadas correctamente)
  2. que el paso más importante de definir una columna adicional para contener esos caracteres CR & LF, aunque no se importarán. Me di cuenta de esto también. Me hubiera beneficiado encontrando tu respuesta antes de comenzar.

Sin esas dos cosas, un intento de ejecutar la importación dará este mensaje de error: La conversión de datos para la columna "columna x" devuelve el valor de estado 4 y texto de estado "texto se trunca o uno o más caracteres no tenía ninguna coincidencia en la página de códigos de destino. ".

He agregado en este texto de error con la esperanza de que alguien encuentre esta página mientras busca la causa de su error. ¡Vale la pena encontrar tu turorial, incluso después de los hechos!

Cuestiones relacionadas