¿Cómo muevo los archivos a una carpeta de archivo una vez procesados?

Intento archivar un conjunto de archivos desde la ruta de origen a una ruta de archivo una vez que he completado algunos elementos de Tarea de flujo de datos. Dentro de un contenedor de bucles Foreach tengo: Tarea de secuencia de comandos -> Tarea de flujo de datos -> Tarea Ejecutar SQL -> Tarea del sistema de archivos

Tengo una variable de usuario establecida en el elemento “Nombre y extensión” en la configuración de Colección en el Contenedor de bucles Foreach. La variable se llama “fileName” y se utiliza tanto en la tarea de secuencia de comandos (utilizada para analizar información del archivo y realizar la tarea de ejecución de SQL) como en la tarea de flujo de datos en el administrador de conexión de archivos planos que a su vez es utilizado por el elemento Fuente de archivo plano. Luego analizo el archivo e inserto los datos en una base de datos. Todo funciona como debería hasta que llego a la Tarea del sistema de archivos (FST).

Lo que me gustaría es que el archivo se mueva a una carpeta de archivo una vez que se complete su inserción. Utilizando varios enlaces en línea ( aquí , aquí y aquí ) he agregado diferentes variables que están codificadas o derivadas del masaje de otras variables. En cualquier caso, lo que sucede es que en el FST recibo errores como “caracteres no válidos en la ruta” o “ruta desconocida”. Si bash dar masajes a los ejemplos vinculados anteriormente para que se ajusten a la estructura de mi sistema de archivos, ahora aparece un error en el paso Fuente de archivo plano en la tarea de flujo de datos que indica que no puede encontrar el archivo especificado. Esto se debe a que a) no se puede encontrar la ruta al archivo porque no se proporciona ninguna ruta de archivo, solo filname.ext b) no puede analizar la variable que contiene la ruta completa al archivo de origen ( @FullSourcePathFileName que tiene su valor configurado en @[User::SourcePath] + @[User::fileName] )

He probado otras varias modificaciones, incluyendo hacer exactamente lo que está en el primer ejemplo que publiqué (sin embargo, eso realmente no hace nada, la tarea de flujo de datos, así que agregué un paso de fuente de archivo plano sin destino) y recibí el mismo conjunto de errores . Estoy perdido aquí y me gustaría recibir sugerencias sobre cómo resolver este problema.

EDITAR: Parece que sigue fallando en FullArchivePathFileName ; nunca evalúa la expresión a pesar de que la tengo configurada en ‘Verdadero’. Todavía está confundido sobre por qué no lo está evaluando. Así que hice su expresión igual que FullSourcePathFileName y verifiqué que el indicador EvaluateAsExpression se establece en True. Todavía no evalúa esta variable. FullSourcePathFileName variable FullSourcePathFileName se está evaluando muy bien.

El siguiente ejemplo creado en SSIS 2005 lee archivos CSV de una carpeta determinada e inserta datos en una tabla SQL. Después de importar datos a SQL, los archivos se mueven a una carpeta de archivo usando la tarea del sistema de archivos.

Proceso paso a paso:

  1. Crea una carpeta llamada Archivar dentro de la ruta C: \ temp. Cree dos archivos CSV llamados File_1.csv y File_2.csv y rellenelos con datos. Deje la carpeta Archivo vacía. Remita las capturas de pantalla # 1 – # 4 .

  2. En el paquete SSIS, cree 5 variables como se muestra en la captura de pantalla # 5 . Establezca la variable RootFolder con el valor C:\temp\ . Establezca la variable FilePattern con el valor *.csv .

  3. Seleccione la variable FilePath y presione F4 para abrir propiedades, cambie la propiedad EvaluateAsExpression a True y establezca la propiedad Expression con el valor @[User::RootFolder] + @[User::FileName] como se muestra en la captura de pantalla # 6 .

  4. Seleccione la variable ArchiveFolder y presione F4 para abrir propiedades, cambie la propiedad EvaluateAsExpression a True y establezca la propiedad Expression con el valor @[User::RootFolder] + "Archive\\" como se muestra en la captura de pantalla # 7 .

  5. En el administrador de conexión del paquete SSIS, cree una nueva conexión de archivos planos denominada CSV . Referencia captura de pantalla # 8 . Configure la conexión de archivos planos como se muestra en las capturas de pantalla # 9 – # 13 . Además, cree una conexión OLE DB llamada SQLServer para conectarse a la base de datos de SQL Server. Después de crear las conexiones, debería verse como se muestra en la captura de pantalla # 14 .

  6. Haga clic con el botón derecho en CSV de conexión de archivos sin formato y seleccione propiedades y configure ConnectionString Expression con el valor @ [User :: FilePath] con el botón de puntos suspensivos, como se muestra en las capturas de pantalla # 15 – # 16 .

  7. Cree una tabla denominada dbo.Items en SQL Server utilizando los scripts que se proporcionan en la sección Scripts de SQL . Los datos de los archivos CSV se insertarán en esta tabla.

  8. En la ficha Flujo de control, coloque un Foreach Loop container , Data Flow Task y File System Task como se muestra en la captura de pantalla n. ° 17 .

  9. Configure el contenedor de bucles Foreach como se muestra en las capturas de pantalla # 18 – # 19 .

  10. Dentro de la Tarea de flujo de datos, coloque un Origen de archivo plano, Transformación de columna derivada y un Destino OLE DB como se muestra en la captura de pantalla n.º 20 .

  11. Configure el origen de archivo plano como se muestra en las capturas de pantalla # 21 y # 22 . Esto leerá los datos de los archivos CSV.

  12. Configure la transformación de columna derivada como se muestra en la captura de pantalla n.º 23 . Esto se usa para crear el valor de la columna FilePath usando la variable del mismo nombre.

  13. Configure el destino de OLE DB como se muestra en las capturas de pantalla # 24 y @ 25 . Esto insertará los datos en la tabla SQL.

  14. En la pestaña Flujo de control, configure la Tarea del sistema de archivos como se muestra en la captura de pantalla n. ° 26 . Tenga en cuenta que, mientras mueve la operación de archivo , DestinationVariable solo se puede especificar como un directorio y no se puede especificar como ruta de archivo completa. Si especifica la ruta del archivo, obtendrá el mensaje de error [File System Task] Error: An error occurred with the following error message: "Could not find a part of the path.".

  15. La captura de pantalla # 28 muestra que no hay datos en la tabla antes de la ejecución del paquete.

  16. Las capturas de pantalla # 29 y # 30 muestran las ejecuciones del paquete dentro de las tabs Control Flow y Data Flow.

  17. Las capturas de pantalla n. ° 31 y n. ° 32 muestran que los archivos se han movido a la carpeta Archivar.

  18. La captura de pantalla # 33 muestra los datos en la tabla después de la ejecución del paquete.

  19. En la tarea del sistema de archivos, la propiedad OverwriteDestination se estableció en False (este es el valor predeterminado). Si mueve archivos de los mismos nombres a la carpeta Archivo, obtendrá el error [File System Task] Error: An error occurred with the following error message: "Cannot create a file when that file already exists. ". se muestra en la captura de pantalla n. ° 34 . Para evitar esto, establezca OverwriteDestination en True o la otra opción es cambiar el nombre de los archivos y copiarlos a la carpeta Archive y luego eliminarlos.

Espero que ayude.

Scripts SQL:

 CREATE TABLE [dbo].[Items]( [Id] [int] IDENTITY(1,1) NOT NULL, [ItemNumber] [varchar](30) NOT NULL, [Price] [numeric](18, 2) NOT NULL, [FilePath] [varchar](255) NOT NULL, CONSTRAINT [PK_Items] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY] GO 

Captura de pantalla n. ° 1:

1

Captura de pantalla n. ° 2:

2

Captura de pantalla n. ° 3:

3

Captura de pantalla n. ° 4:

4

Captura de pantalla n. ° 5:

5

Captura de pantalla n.º 6:

6

Captura de pantalla n. ° 7:

7

Captura de pantalla n. ° 8:

8

Captura de pantalla n. ° 9:

9

Captura de pantalla n. ° 10:

10

Captura de pantalla n. ° 11:

11

Captura de pantalla n.º 12:

12

Captura de pantalla n.º 13:

13

Captura de pantalla n.º 14:

14

Captura de pantalla n.º 15:

15

Captura de pantalla n.º 16:

dieciséis

Captura de pantalla n.º 17:

17

Captura de pantalla n.º 18:

18

Captura de pantalla n. ° 19:

19

Captura de pantalla n. ° 20:

20

Captura de pantalla n.º 21:

21

Captura de pantalla n.º 22:

22

Captura de pantalla n.º 23:

23

Captura de pantalla n.º 24:

24

Captura de pantalla n. ° 25:

25

Captura de pantalla n.º 26:

26

Captura de pantalla n.º 27:

27

Captura de pantalla n.º 28:

28

Captura de pantalla n.º 29:

29

Captura de pantalla # 30:

30

Captura de pantalla n.º 31:

31

Captura de pantalla n. ° 32:

32

Captura de pantalla n. ° 33:

33

Captura de pantalla n.º 34:

34