2010-10-13 38 views
10

Antes de tener algún tipo de ataque al corazón relacionado con el estrés.Conjunto de resultados del conjunto de SSIS del flujo de datos a la variable

¿Alguien sabría cómo completar la tarea aparentemente simple de establecer el conjunto de resultados de una tarea de flujo de datos (el resultado será 0 o 1) y asignar ese valor a una variable.

He creado la variable ok.

El conjunto de resultados proviene de un archivo XML con varios elementos. La bandera (0 o 1) es el resultado de uno de esos elementos, así que también necesito saber cómo conseguir que el conjunto de resultados sea solo esa bandera.

Si alguien pudiera ayudar, realmente lo agradecería.

Actualización: finalmente leí el resultado (0,1) de nuevo a SQL Server en una tabla de indicadores. Luego usó un script Execute SQL para leerlo desde SQL Server y a una variable. No estoy seguro de si esta es la mejor manera de hacerlo, pero parece haber hecho el truco.

Respuesta

9

Puede usar un componente de secuencia de comandos de flujo de datos para transferir un valor de columna de flujo de datos a una variable de SSIS. Sin embargo, debe seguir ciertas reglas cuando trabaje con el componente del script de flujo de datos y las variables de SSIS.

SSIS no le permite asignar valores a las variables SSIS en el procedimiento de secuencia de comandos que procesa las filas. Pero existen procedimientos previos y posteriores a la ejecución en los que puede manejar la tarea.

En su componente de secuencia de comandos, agregue la variable SSIS a la propiedad ReadWriteVariables. Edite el script y declare una variable en la clase ScriptMain. Use el procedimiento PreExecute para inicializar la variable. Utilice el procedimiento ProcessInputRow para asignar el valor de la columna input -buffer a la variable de script. Y use la tarea PostExecute para asignar el valor de la variable del script a la variable SSIS.

Aquí hay un componente de script VB de ejemplo. Tiene una variable SSIS (MyOutVariable) que obtendrá el resultado de la variable de script (MyVar). La variable MyVar obtiene su valor de la columna MyNumber en el flujo de datos.

Public Class ScriptMain 
    Inherits UserComponent 

    Dim MyVar As Integer 

    Public Overrides Sub PreExecute() 
     MyBase.PreExecute() 

     'initialize variable local to data flow 
     MyVar = 0 

    End Sub 

    Public Overrides Sub PostExecute() 
     MyBase.PostExecute() 

     ' output variable value to SSIS variable 
     Me.Variables.MyOutVariable = MyVar 

    End Sub 

    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) 

     ' logic to get value 
     MyVar = Row.MyNumber 

    End Sub 
End Class 
1

A partir de SSIS 2012, se puede asignar fácilmente una variable un valor utilizando el Expresión de tareas. No es necesario escribir una secuencia de comandos, que la mayoría de nosotros desconfiamos, para llevar a cabo una tarea aparentemente simple de establecer el valor de una variable.

Ej: Si tengo una variable de fecha llamada Today y quiero asignarle un valor, puedo hacerlo fácilmente en la tarea Expresión como se muestra a continuación.

enter image description here

Lectura adicional: MSDN - SSIS Expression Task Documentation.

NOTA:(La respuesta aceptada es obsoleta.)

+0

Nota pregunta original es de 5 años de edad, antes de SQL Server 2012. Seleccionado respuesta era correcta en el momento. – Pixelated

+0

Lo sé.Dejé esa nota en mi respuesta, por lo que alguien que viene a esta pregunta en 2016 no va por buen camino si está usando SSIS 2012 o> :) – Shiva

+1

@Shiva - La respuesta aplicable de SSIS 2012 parece incompleta - La pregunta es cómo establecer una variable con un valor obtenido de una tarea de flujo de datos. Sin embargo, Expression Task no está disponible dentro de un flujo de datos (mientras que el componente de script lo es), por lo que también necesitamos saber cómo recuperar el valor del flujo de datos al flujo de control para luego usar la tarea de expresión. – Voysinmyhead

Cuestiones relacionadas