2010-06-24 33 views
5

Estoy utilizando SSIS para hacer la transformación de datos de Excel a SQL OLEDB. Tengo un conjunto de hojas en una carpeta que tendré que pasar por el bucle e insertar los datos en cada una de estas hojas en una tabla. Tengo un escenario en el que tengo que pasar por un conjunto de hojas de Excel que tiene diferentes estructuras de columna. Puedo recorrer cada hoja a través del enumerador de bucle foreach. Encontrar el nombre del archivo y pasarlo a la fuente de Excel.SSIS - asignaciones dinámicas de columnas

Quiero saber si hay manera de escapar de estas asignaciones de columna en el componente de destino que será una tabla SQL OLEDB en mi caso. Porque estas asignaciones son diferentes para cada archivo. ¿Hay forma de hacer esto de forma dinámica?

Respuesta

5

Si bien puede agregar una tarea de secuencia de comandos dentro del ciclo para modificar las asignaciones, no es lo más fácil ya que tiene que crear explícitamente cada asignación en el código. Una solución más simple sería reemplazar hojas de Excel con archivos de texto delimitados e importarlas dentro del ciclo utilizando la Tarea de inserción masiva. No tendrá que proporcionar ninguna información de mapeo siempre que el orden de las columnas sea el mismo en ambos archivos y tablas.

Si no puede hacer eso, tendrá que almacenar los metadatos de la asignación en algún lugar, p. una tabla en su base de datos y use esto para crear las asignaciones dinámicas en una tarea de Script.

Una forma un poco más fácil es usar solo una tarea de script que use los metadatos para configurar un objeto SqlBulkCopy. Perderá la flexibilidad de una tarea de flujo de datos completa, pero si todo lo que desea es cargar algunos archivos en templos temporales, es suficiente. Además, es mucho más fácil configurar un objeto SqlBulkCopy que una tarea de flujo de datos.

+0

¿Cómo utilizo la tarea de secuencia de comandos para configurar un objeto SQLBulkcopy? ¿Hay algún enlace que pueda usar? puede ser un poco más breve ... disculpe por ser tan tonto – Baaju

+3

Pruebe la documentación de la clase SqlBulkCopyColumnMapping en http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopycolumnmapping.aspx para un ejemplo que usa mapeos personalizados. Es tan simple como proporcionar un lector de origen (OleDbDataReader para Excel), conectar el destino y rellenar la propiedad ColumnMappings del objeto SqlBulkCopy utilizando los nombres de las columnas de origen y destino. Incluso puede dejar la lista ColumnMappings vacía, en cuyo caso asigna columnas de acuerdo con su posición ordinal, tal como lo hace la tarea Bulk Insert. –

Cuestiones relacionadas