miércoles, 19 de septiembre de 2012

Verficar si un archivo ya fue cargado en ssis

Hol@s hoy les voy a  presentar  algo que me ayudado mucho, y es el como verifiar si un archivo ya fue cargado  a una bd, y asi con este logramos que no se vuelva  cargar.

Bueno lo primero que vamos a realizar es crear una tabla.
CREATE TABLE [dbo].[FilesToProcess]
(    
[Id] [int] NOT NULL,   
[FileFullName] [varchar](255) NOT NULL, 
[LastModifiedDate] [datetime] NOT NULL, 
[ProcessDate]  AS (getdate())

en esta  vamos a guardar el path del archivo y  las fechas de modificación.
Vamos a  terner lo siguiente, lo que vendria a ser nuestro entorno.

El primero es un execute sql task
el segundo un script task
el tercero un data flow task
y por ultimo un send mail task.














Creamos las variables globales en el control flow.

La primera  hace referencia al nombre del archivo.
La segunda hace referencia a la fecha de  ultima modificación del archivo.
La tercera  hace referencia a la ultima modificaión que se encuentra en la tabla de la base de datos


En el execute sql task  lo que  vamos a realizar  es:
  1. en result set lo ponemos a  single row
  2. configuramos el connection type, connection.
  3. escogemos la opcion de Direct input y  añadimos la sentencia sql  q  vamos usar: SELECT [FileFullName], [LastModifiedDate]  FROM [dbo].[FilesToProcess]
    where [Id]=1;
Con esto lo que hacemos es  traer el path del archivo  y la ultima fecha de modificación.

en la  opción del  result set  hacemos referencia a los datos que nos devuelve  el  sql, ya que el sql esta  sin un as  que es asignacion de nombres los resultados nos lo devuelve con 0 y 1  respectivamente  a cada  campo del select,  y  asi procedemos a estableces a que  variable corresponde cada  resultado.

En el script  vamos a establecer que variables son de escritura  y cuales  son de solo lectura.


En el scrip  vamos a poner el siguiente  codigo(c#)

try
{

System.IO.
FileInfo mFileInfo = new System.IO.FileInfo(Dts.Variables["vFileFullName"].Value.ToString());if (mFileInfo != null) {
Dts.Variables[
"vFileModifiedDate"].Value = mFileInfo.LastWriteTime;Dts.TaskResult = (int)ScriptResults.Success; }

else {
Dts.TaskResult = (
int)ScriptResults.Failure; }



Con esto  obtenemos  la fecha de ultima modificación del archivo que especificamos en el path.

El siguiente paso es verificar  si la  fehca que nos devolvio el script  es diferente de la que tenemos almacena en la base de datos  y  para  eso  en la union de nuestro script task y  data flow task  establecemos  una precedencia de condicion.



con esto decimos que si son diferentes va  a pasar  a ejeutar el data flow task  caso contrario  nos diria que el archivo ya fue cargado.

Pero aqui viene lo interesante que tenemos que actualizar la fecha  de ultima modificaión  en la base de datos para que  asi que constancia del ultimo que cargo.

Y para eso lo que hacemos es despues de que ya cargo el data flow task  añadimos otro execute sql task  en el cual lo que vamos a  hacer es reemplazar nuestro registro de ultima fecha  de modificaion de la base de datos por el que obtuvimos en el script.


una vez puesto el sql de update temos que  enviar  el dato de  la variable que tiene  la ultima feha, es decir la del script, y para eso tenemos que mapiarlo de la siguiente manera.


en donde  el 0 hace referencia a ? del sql .

Lo otro de enviar mensajes  de correo ya es cuention de uno si lo queremos realizar pero la parte  importante  de saber si un archivo ya fue cargado o no lo hacemos  con lo anterior mente  dicho.

espero sea de su ayuda.

Saludos,
vgv

miércoles, 15 de agosto de 2012

Bienvenidos

Este blog tratara temas de Business Intelligence y temas de filosofia que nos ayudara a tener un pensamiento mas critico.