none
Ejecucion condicional de un paquete en SSIS RRS feed

  • Pregunta

  • Hola...tengo que coorer un paquete solo si el valor de un campo en una tabla es igual a 1....soy nuevo en esto...donde se coloca el condicional al principio del paquete para que corra o no de acuerdo al valor de ese campo?

    Gracias!

    Zek

    miércoles, 15 de diciembre de 2010 17:52

Respuestas

  • hola,

    Si ya tu tienes desarrollado tu poquete y solo te falta hacer la condicion

    Bueno te pongo un ejemplo simple de como puede hacerlo espero que te pueda ayudar

    Parte 1

    Esta parte es donde lo vas a colocar el boton 


    SqlConnection SQLconn = new SqlConnection(conection);
            SQLconn.Open();
            SqlCommand cmd = new SqlCommand("SELECT campo FROM TABLA where id = @id", SQLconn);
            cmd.Parameters.AddWithValue("@id", valor);
            SqlDataReader reader = cmd.ExecuteReader();

            try
            {

                if (reader.HasRows)
                {

                    int valor = reader["campo"].ToString();

                    if (valor == 1)
                    {
                        // AQUI ES DONDE TU VAS A CORRRE EL PAQUETE SI SE COMPLE LA CONDICION.
    RunDTSPackage("Nombre del DTS","archivo",ruta);
                    }

                }

            }
            catch (Exception)
            {

            }
            finally
            {
                SQLconn.Close();
            }

    Parte 2

    Este es metodo donde tu vas a ejecutar el Packete 

        private void RunDTSPackage(string DTS,  string FileName, string Path)
        {

            Application app = new Application();
            Package package2 = DAL.NuevoPaquete(DTS);
            Variables vars = package2.Variables;

            string Path2= Path + FileName;
            vars["FileName"].Value = Path;
            vars["Path"].Value = Path2;

            try
            {
                switch (result2.ToString())
                {
                    case "Success":
                        Resultado = "Archivo subido y validado correctamente.";
                        break;
                    case "Failure":
                        Resultado = "Error cargando archivo";
                        foreach (DtsError pkgError in package2.Errors)
                        {
                            Resultado = Resultado + "Description  {0} " + pkgError.Description;
                            lblMensaje.Text = Resultado;
                        }

                        break;
                    default:
                        Resultado = "Error cargando archivo";
                        foreach (DtsError pkgError in package2.Errors)
                        {

                            Resultado = Resultado + "Description  {0} " + pkgError.Description;
                            lblMensaje.Text = Resultado;

                        }
                        break;
                }

                package2.Dispose();
            }
            catch (NullReferenceException ex)
            {
                Resultado = ex.Message;
            }
            finally
            {

            }
        } 

    Parte 3

    Esta es la parte donde tu le pasa el Sevidor y usuario y passwork


       //Preparar el objeto Package y devolverlo listo.
        public static Package NuevoPaquete(string dtsName)
        {
            Application app = new Application();
            Package p = new Package();
            p = app.LoadFromSqlServer(dtsName
                                     , ConfigurationManager.AppSettings["Server"].ToString()
                                     , ConfigurationManager.AppSettings["User"].ToString()
                                     , ConfigurationManager.AppSettings["Pass"]
                                     , null);

            return p;

        }

    Nota

    Espero que te se de utilidad Suerte..


    Enmanuel Grullard@Developer ASP.NET,C#.NET
    miércoles, 15 de diciembre de 2010 18:49
  • hola,

    No ,, Mira este link te busque te puede ayudar hay te explico con algunos graficos Suerte

    http://www.codeproject.com/KB/database/CallSSISFromCSharp.aspx


    Enmanuel Grullard@Developer ASP.NET,C#.NET
    miércoles, 15 de diciembre de 2010 19:24
  • Hola.

    Lo más limpio es condicionarlo con una variable. Para ello, creas una tarea de ejecución de SQL que lea el valor en cuestión de la tabla y lo almacene en una variable:

    select Parametro from MiTabla where...

    Para ello, debes configurar la tarea para que el resultado sea un Single Row (propiedad ResultSet). Y en la pestaña ResultSet, añades uno y le pones de nombre "Parametro" y lo almacenas en una nueva variable (ojo, el Scope ha de ser el propio paquete), a la que le tienes que dar un nombre, por ejemplo "Condicion".

    Este paso iría al principio de todo, lo unes al siguiente paso (el primer paso de tu dtsx actual) con un paso de "Success", la flecha verde. Sobre esa flecha verde, haces click derecho + edit y en el formulario que aparezca, seleccionas "Constraint and Expression" en el combo "Evaluation operation". En "Expression" pones "@Condicion==1".

    De esta forma, sólo si el campo de la tabla vale 1, se ejecutarán el resto de pasos del paquete.

    Si no lo logras, nos dices.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/

    miércoles, 15 de diciembre de 2010 20:35
    Moderador

Todas las respuestas

  • hola,

    Esa comparaciones tu las tienes que hacer en un IDE de  lenguaje de programacion o donde te dijeron ?

     


    Enmanuel Grullard@Developer ASP.NET,C#.NET
    miércoles, 15 de diciembre de 2010 18:29
  • La verdad no lo sé...soy bastante nuevo en esto y pensé que existía algun condicional antes de ejecutar el paquete.
    miércoles, 15 de diciembre de 2010 18:41
  • hola,

    Si ya tu tienes desarrollado tu poquete y solo te falta hacer la condicion

    Bueno te pongo un ejemplo simple de como puede hacerlo espero que te pueda ayudar

    Parte 1

    Esta parte es donde lo vas a colocar el boton 


    SqlConnection SQLconn = new SqlConnection(conection);
            SQLconn.Open();
            SqlCommand cmd = new SqlCommand("SELECT campo FROM TABLA where id = @id", SQLconn);
            cmd.Parameters.AddWithValue("@id", valor);
            SqlDataReader reader = cmd.ExecuteReader();

            try
            {

                if (reader.HasRows)
                {

                    int valor = reader["campo"].ToString();

                    if (valor == 1)
                    {
                        // AQUI ES DONDE TU VAS A CORRRE EL PAQUETE SI SE COMPLE LA CONDICION.
    RunDTSPackage("Nombre del DTS","archivo",ruta);
                    }

                }

            }
            catch (Exception)
            {

            }
            finally
            {
                SQLconn.Close();
            }

    Parte 2

    Este es metodo donde tu vas a ejecutar el Packete 

        private void RunDTSPackage(string DTS,  string FileName, string Path)
        {

            Application app = new Application();
            Package package2 = DAL.NuevoPaquete(DTS);
            Variables vars = package2.Variables;

            string Path2= Path + FileName;
            vars["FileName"].Value = Path;
            vars["Path"].Value = Path2;

            try
            {
                switch (result2.ToString())
                {
                    case "Success":
                        Resultado = "Archivo subido y validado correctamente.";
                        break;
                    case "Failure":
                        Resultado = "Error cargando archivo";
                        foreach (DtsError pkgError in package2.Errors)
                        {
                            Resultado = Resultado + "Description  {0} " + pkgError.Description;
                            lblMensaje.Text = Resultado;
                        }

                        break;
                    default:
                        Resultado = "Error cargando archivo";
                        foreach (DtsError pkgError in package2.Errors)
                        {

                            Resultado = Resultado + "Description  {0} " + pkgError.Description;
                            lblMensaje.Text = Resultado;

                        }
                        break;
                }

                package2.Dispose();
            }
            catch (NullReferenceException ex)
            {
                Resultado = ex.Message;
            }
            finally
            {

            }
        } 

    Parte 3

    Esta es la parte donde tu le pasa el Sevidor y usuario y passwork


       //Preparar el objeto Package y devolverlo listo.
        public static Package NuevoPaquete(string dtsName)
        {
            Application app = new Application();
            Package p = new Package();
            p = app.LoadFromSqlServer(dtsName
                                     , ConfigurationManager.AppSettings["Server"].ToString()
                                     , ConfigurationManager.AppSettings["User"].ToString()
                                     , ConfigurationManager.AppSettings["Pass"]
                                     , null);

            return p;

        }

    Nota

    Espero que te se de utilidad Suerte..


    Enmanuel Grullard@Developer ASP.NET,C#.NET
    miércoles, 15 de diciembre de 2010 18:49
  • Gracias Emmanuel!

    Este código va dentro de un Script Task en el paquete?

    miércoles, 15 de diciembre de 2010 18:55
  • hola,

    No ,, Mira este link te busque te puede ayudar hay te explico con algunos graficos Suerte

    http://www.codeproject.com/KB/database/CallSSISFromCSharp.aspx


    Enmanuel Grullard@Developer ASP.NET,C#.NET
    miércoles, 15 de diciembre de 2010 19:24
  • Hola.

    Lo más limpio es condicionarlo con una variable. Para ello, creas una tarea de ejecución de SQL que lea el valor en cuestión de la tabla y lo almacene en una variable:

    select Parametro from MiTabla where...

    Para ello, debes configurar la tarea para que el resultado sea un Single Row (propiedad ResultSet). Y en la pestaña ResultSet, añades uno y le pones de nombre "Parametro" y lo almacenas en una nueva variable (ojo, el Scope ha de ser el propio paquete), a la que le tienes que dar un nombre, por ejemplo "Condicion".

    Este paso iría al principio de todo, lo unes al siguiente paso (el primer paso de tu dtsx actual) con un paso de "Success", la flecha verde. Sobre esa flecha verde, haces click derecho + edit y en el formulario que aparezca, seleccionas "Constraint and Expression" en el combo "Evaluation operation". En "Expression" pones "@Condicion==1".

    De esta forma, sólo si el campo de la tabla vale 1, se ejecutarán el resto de pasos del paquete.

    Si no lo logras, nos dices.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/

    miércoles, 15 de diciembre de 2010 20:35
    Moderador