2010-02-17 6 views
7

Ceci est avec SQL 2005.Composant de script SSIS écrire dans la variable

J'ai un composant de script dans une tâche de flux de données. Je voudrais lire dans les colonnes d'entrée et écrire les données dans une variable utilisateur globale.

J'ai défini mes colonnes d'entrée et ajouté ma variable utilisateur globale en tant que ReadWriteVariable aux propriétés du composant de script.

Voici mon code, j'essaie juste de modifier la valeur de la variable utilisateur globale ici, mais cela ne fonctionne pas. Quand j'écris sur la valeur de la variable dans une autre tâche, il a encore sa valeur par défaut:

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 

J'ai aussi essayé sans succès:

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

Répondre

7

Je l'ai compris.

De MS:

Dans le code de composant Script, vous utilisez propriétés accesseur typées pour accéder certaines fonctionnalités du paquet tels que variables et les gestionnaires de connexion. La méthode PreExecute ne peut accéder qu'aux variables en lecture seule . La méthode PostExecute peut accéder à la fois en lecture seule et en variables en lecture/écriture. Pour plus d'informations sur ces méthodes , voir Codage et débogage du composant de script .

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

On dirait que Dts est disponible uniquement dans la tâche de script.

Voici ce que le code ressemble:

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

dans SSIS 2008, vous ne pouvez pas déclarer une fonction appelée PostExecute avec remplacements. – terenf

1

Utilisez

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

Et SQL_ATTR_Update doit être une variable globale et répertoriée dans vos ReadWriteVariables pour cette tâche de script.

+0

Quand j'ajoute Dts il dit « Nom « Dts » est pas déclarée. » Je peux bien utiliser Dts dans une tâche de script, mais pas un composant. – MaxGeek

+0

Ah, j'ai raté ce point "composant". – thursdaysgeek

+0

Dts.Variables n'est exposé que dans un flux de contrôle. Dans un flux de données, vous avez le champ this.Variables. –

Questions connexes