2010-02-17 4 views
7

Jest to z SQL 2005.Składnik SSIS Skrypt Zapisz do zmiennej

Mam komponent skryptu wewnątrz Zadanie przepływu danych. Chciałbym odczytać z kolumn wejściowych i zapisać dane do globalnej zmiennej użytkownika.

mam ustawić moje kolumny wejściowe i dodaje mój zmienną globalną użytkownika jako ReadWriteVariable do właściwości składnika skryptów.

Oto mój kod, po prostu próbuję zmienić wartość zmiennej globalnej użytkownika tutaj, ale jej nie działa. Kiedy piszę się wartość zmiennej w innym zadaniu nadal ma swoją wartość domyślną:

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 

Próbowałem również bez powodzenia:

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

Odpowiedz

7

I zdobione.

Od MS:

W kodzie składnika skryptów, należy użyć wpisane właściwości dostępowe do dostępu pewnych funkcji, takich jak pakiet zmiennych i menedżerów połączenia.

Sposób PreExecute może uzyskać dostęp tylko tylko do odczytu zmiennych. Metoda PostExecute może uzyskiwać dostęp do zmiennych do odczytu i zapisu tylko do odczytu i .

Aby uzyskać więcej informacji o tych metodach , zobacz Kodowanie i debugowanie składnika skryptowego .

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

Wygląda DTS jest dostępny tylko w skrypcie zadanie.

Oto co kod wygląda następująco:

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

w SSIS 2008, nie można zadeklarować funkcję o nazwie postExecute ze sterowaniem ręcznym. – terenf

1

użytkowania

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

I SQL_ATTR_Update musi być zmienną globalną i znajdować się w Twoich ReadWriteVariables dla tego zadania skryptu.

+0

Kiedy dodać DTS mówi mogę używać DTS grzywny w skrypcie Zadanie chociaż, ale nie komponentu. – MaxGeek

+0

Ah, przegapiłem punkt "komponentu". – thursdaysgeek

+0

Dts.Variables jest widoczny tylko w przepływie sterowania. W przepływie danych musisz mieć pole this.Variables. –