2010-02-17 14 views
7

Esto es con SQL 2005.Componente de script SSIS Escribir en la variable

Tengo un componente de script dentro de una tarea de flujo de datos. Me gustaría leer de las columnas de entrada y escribir los datos en una variable de usuario global.

He establecido mis columnas de entrada y he agregado mi variable de usuario global como ReadWriteVariable a las propiedades del componente del script.

Aquí está mi código, estoy tratando de alterar el valor de la variable de usuario global aquí, pero no está funcionando. Cuando escribo el valor de la variable en otra tarea que todavía tiene su valor por defecto:

Imports System 
Imports System.Data 
Imports System.Math 
Imports Microsoft.SqlServer.Dts.Runtime 
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper 
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper 

Public Class ScriptMain 
    Inherits UserComponent 
    Dim updateSQL As String 

    Public Sub Main() 
     Dim vars As IDTSVariables90 

     VariableDispenser.LockOneForWrite("SQL_ATTR_Update", vars) 
     vars("SQL_ATTR_Update").Value = "Test" 
     vars.Unlock() 
    End Sub 


    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) 
     'updateSQL = Row.ITMID + Row.PRCCAT 
    End Sub 

End Class 

también he intentado sin suerte:

Me.ReadWriteVariables("SQL_ATTR_Update").Value = "Test" 

Respuesta

7

Me di cuenta.

Desde MS:

En código de componente de script, se utiliza propiedades de acceso con tipo acceder a ciertas características del paquete como variables y administradores de conexión.

El método PreExecute solo puede acceder a variables de solo lectura. El método PostExecute puede acceder a las variables de lectura/escritura de solo lectura y . Para obtener más información sobre estos métodos , consulte Codificación y depuración del componente de script .

http://msdn.microsoft.com/en-us/library/ms136031.aspx

Parece que Dts está disponible sólo en secuencias de comandos de tareas.

Esto es lo que se ve el código como:

Imports System 
Imports System.Data 
Imports System.Math 
Imports Microsoft.SqlServer.Dts.Runtime 
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper 
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper 

Public Class ScriptMain 
    Inherits UserComponent 
    Dim updateSQL As String 


    Public Overrides Sub PostExecute() 
     Me.ReadWriteVariables("SQL_ATTR_Update").Value = "Test" 
    End Sub 

    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) 
     'updateSQL = Row.ITMID + Row.PRCCAT 
    End Sub 

End Class 
+0

en SSIS 2008, no puede declarar una función llamada PostExecute con modificaciones. – terenf

1

Uso

Dts.Variables("SQL_ATTR_Update").Value = "Test" 

Y SQL_ATTR_Update debe ser una variable global y debe aparecer en sus ReadWriteVariables para esa tarea de script.

+0

Cuando agrego Dts que dice "Nombre 'Dts' no se declara." No obstante, puedo usar Dts fine en una tarea de secuencia de comandos, pero no en un componente. – MaxGeek

+0

Ah, me perdí ese punto de "componente". – thursdaysgeek

+0

Dts.Variables solo está expuesto en un flujo de control. En un flujo de datos, tiene el campo this.Variables. –

Cuestiones relacionadas