ssis - tablas - importar datos sql server
¿Cómo importar un archivo plano de ancho fijo a la base de datos utilizando SSIS? (3)
Aquí hay un paquete de muestra creado con 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 llamado
Fixed_Width_File.txt
con datos como se muestra en la captura de pantalla. La captura de pantalla utiliza Notepad ++ para mostrar el contenido del archivo. Tiene la capacidad de mostrar los caracteres especiales como el retorno de carro y el avance de línea.CR LF
denota los delimitadores de fila Retorno de carro y Avance de línea .
En la base de datos del servidor SQL, cree una tabla llamada
dbo.FlatFile
usando el script de creación que se proporciona en la sección Scripts SQL .Cree un nuevo paquete SSIS y agregue un nuevo administrador de conexión OLE DB que se conecte a la base de datos de SQL Server. Supongamos que el administrador de conexión OLE DB se denomina como SQLServer .
- En la pestaña de flujo de control del paquete, coloque una Tarea de flujo de datos .
Haga doble clic en la tarea de flujo de datos y se lo llevará a la pestaña de flujo de datos. En la pestaña de flujo de datos, coloque un Origen de archivo plano . Haga doble clic en el origen de archivo plano y aparecerá el Editor de origen de archivo plano . Haga clic en el botón Nuevo para abrir el Editor del administrador de conexión de archivos planos .
En la sección General del Editor de fuentes de archivos planos , ingrese un valor en Nombre del administrador de conexión (diga Fuente ) y busque la ubicación del archivo plano y seleccione el archivo. Este ejemplo utiliza 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 de encabezado para omitir el cuadro de texto para omitir la fila de encabezado.
- Haga clic en la sección Columnas . Cambie la fuente de acuerdo a su elección. Elegí Courier New para poder ver más datos con menos desplazamiento. Introduzca 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 fila. 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 columna. Tenga en cuenta las secciones 4, 5, 6 y en la siguiente captura de pantalla.
- Haga clic en la sección Avanzada . Notará 5 columnas creadas automáticamente según los límites de columna que establecimos en la sección Columnas en el paso anterior. La quinta columna es para delimitador de filas.
- Cambie el nombre de los nombres de columna como
FirstName
,LastName
,Id
,Date
yRowDelimiter
- De forma predeterminada, las columnas se establecerán con la cadena DataType [DT_STR]. Si estamos bastante seguros de que una determinada columna será de un tipo de datos diferente, podemos configurarlo en la sección Avanzado.
four-byte signed integer [DT_I4]
columnaId
para que sea del tipo de datosfour-byte signed integer [DT_I4]
y la columna Fecha para que sea del tipo de datosdate [DT_DATE]
- Haga clic en la sección Vista previa . Los datos se mostrarán según la configuración de la columna.
- Haga clic en Aceptar en el editor del administrador de conexión de archivos planos y la conexión de archivos planos se asignará al Origen de archivos planos en la tarea de flujo de datos.
- En el Editor de fuente de archivo plano, haga clic en la sección Columnas. Notará las columnas que se configuraron en el administrador de conexión de archivos planos. Desmarque el
RowDelimiter
porque no necesitaremos eso.
- En la tarea de flujo de datos, coloque un
OLE DB Destination
. Conecte la salida del origen del archivo plano al destino OLE DB.
- En el Editor de destino de OLE DB, seleccione el administrador de conexión de OLE DB llamado
SQLServer
y configure el nombre de la tabla o la vista desplegable a[dbo].[FlatFile]
- En el Editor de destino de 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 llevará a cabo automáticamente. Si los nombres son diferentes, debe asignar las columnas manualmente. Haga clic en Aceptar.
- Ahora el paquete está listo. Ejecute el paquete para cargar los datos del archivo plano de ancho fijo en la base de datos.
- Si consulta la tabla dbo.FlatFile en la base de datos, observará que los datos del archivo sin formato se importan a la base de datos.
Esta muestra debería darle una idea sobre cómo importar un archivo plano de ancho fijo a la base de datos. No explica cómo manejar el registro de errores, pero esto lo ayudará a comenzar y lo ayudará 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
)
¿Alguien tiene un tutorial sobre cómo importar un archivo plano de ancho fijo a una base de datos utilizando un paquete SSIS?
Tengo un archivo plano que contiene columnas con longitudes variables.
Column name Width
----------- -----
First name 25
Last name 25
Id 9
Date 8
¿Cómo convierto un archivo plano en columnas?
En la transformación de columna derivada puede usar la función SUBSTRING () para cada una de las columnas. Ejemplo:
Columnas DerivedColumn
FirstName SUBSTRING (Data, startFrom, Length);
Aquí, el Nombre tiene un ancho de 25, por lo que si consideramos que desde la posición 0 en la columna derivada, debe especificarlo dando SUBSTRING (Datos, 0, 25);
Del mismo modo para otras columnas.
Muy bien explicado, Siva! Tu tutorial y excelentes ilustraciones señalan lo que Microsoft debería haber dejado en claro
- que el ancho para una fila de longitud fija tiene que incluir los caracteres Retorno de carro y Avance de línea (CR y LF) (que descubrí porque la vista previa mostró que las filas no se alineaban correctamente)
- el paso tan importante de definir una columna adicional para contener esos caracteres CR y LF, aunque no se importarán. También me di cuenta de esto. Me hubiera beneficiado encontrar su 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" devolvió el valor de estado 4 y el texto de estado "El texto se truncó o uno o más caracteres no coincidieron en la página de códigos de destino . ".
He agregado 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 del hecho!