Pregunta SSIS: cómo recorrer los archivos en la carpeta y obtener la ruta + los nombres de los archivos y finalmente ejecutar el procedimiento almacenado con el parámetro como Ruta + Nombre del archivo


Cualquier ayuda es muy apreciada. Estoy tratando de crear un paquete SSIS para recorrer en bucle los archivos en la carpeta y obtener la ruta + nombre de archivo y finalmente ejecutar el proc almacenado con el parámetro como ruta + nombre de archivo. No estoy seguro de cómo obtener la ruta + nombre de archivo e insertarlo en el procedimiento Almacenado como parámetro. He adjuntado la captura de pantalla para su referencia.


5
2017-07-01 17:53


origen


Respuestas:


Parece que tienes la idea correcta en general y el enlace @ Speedbirt186 proporcionado tiene algunos buenos detalles, pero parece que hay un par de matices que pensé que podría señalar en relación con el flujo y las variables.

El bucle foreach puede asignar la ruta completa o el nombre del archivo o el nombre y la extensión del archivo a una variable. Esta última será la más útil en su caso si no desea agregar una tarea de script para dividir el nombre de archivo de la ruta. Si comienzas agregando 5 variables a tu proyecto, te será un poco más fácil. 1 será la ruta del directorio fuente, otra la ruta del directorio de destino (archivo), y luego 1 para contener el nombre de archivo y la extensión asignados por el para cada ciclo. Luego, 2 variables dinámicas adicionales que simplemente combinan el directorio de origen y el nombre de archivo para obtener la ruta de origen completa y el destino con el nombre de archivo para obtener la ruta de destino completa.

enter image description here

A continuación, asegúrese de configurar su base de datos y las conexiones de archivos de Excel. En su conexión de archivo de Excel después de configurarlo, vaya a Expresiones en la ventana de propiedades y configure la propiedad "Cadena de conexión" en SourceFullPath. Esto le dirá a la conexión que cambie la ruta del archivo en cada iteración de su bucle.

enter image description here

Ahora solo necesita configurar su bucle, etc. Agregue el primer plano de cada contenedor de bucle configurando un directorio, filtre y elija Nombre y extensión de archivo.

enter image description here

Ahora, en el cuadro de expresión en la página de colección, establezca que la propiedad del directorio sea la de su variable Directorio de origen.

enter image description here

La última parte del Fore cada bucle es configurar sus asignaciones de variables para almacenar el nombre del archivo en su variable. así que vaya a esa pestaña elija su variable de nombre de archivo y establezca el índice en 0.

enter image description here

En este punto, puede agregar su flujo de datos y configurar su importación tal como lo haría con un archivo normal (tenga en cuenta que el valor predeterminado para su parámetro de nombre de archivo debe ser un archivo real con la estructura que desea importar).

Después de que su flujo de datos caiga en su tarea Ejecutar SQL y configúrelo como necesite. Aquí hay un ejemplo de entrada directa y puede ver que una manera fácil de hacer referencia a un parámetro es simplemente un signo de interrogación (?).

enter image description here

A continuación, en su tarea de SQL, configure su asignación de parámetros agregando los detalles que necesita, tales como:

enter image description here

Ahora estás en tu tarea de archivo. Elimine la tarea y la configuración del archivo como desee, pero elija las variables de ruta de destino y de origen para indicar a la tarea qué archivo mover.

enter image description here

eso es todo tu hecho. Hay 1 cosa más a tener en cuenta, sin embargo. La forma en que tiene su prioridad establecida en la imagen que publicó muestra cómo va de su flujo de datos a su sql y a su tarea de archivo de forma simultánea. Si su procedimiento almacenado se basa en su archivo, puede querer ponerlo después de su tarea de SQL. Siempre puede cambiar las opciones de restricción a "finalización" si desea mover el archivo incluso si su proceso almacenado falla.

enter image description here enter image description here


11
2017-07-03 19:23



Lo que quiere hacer es crear una variable en su paquete, llámalo algo así como Nombre de archivo. En la ventana Editar de Foreach, puede configurar esa variable para que se establezca (en la página de asignaciones de variables, establezca el índice en 0).

Para crear una variable, necesitará que se muestre la ventana Variables. Use el menú Ver para mostrarlo si no está abierto actualmente.

Luego, cuando llame a su procedimiento almacenado, puede pasar el valor actual de la variable como parámetro.

Este enlace podría ayudar: https://www.simple-talk.com/sql/ssis/ssis-basics-introducing-the-foreach-loop-container/


4
2017-07-01 18:04