2010-10-13 9 views
10

Zanim dam sobie jakiś atak serca związany ze stresem.Zestaw wyników SSIS z przepływu danych do zmiennej

Czy ktoś wie, jak wykonać pozornie proste zadanie ustawiania zestawu wyników jednego zadania przepływu danych (wynikiem będzie 0 lub 1) i przypisanie tej wartości do zmiennej.

Stworzyłem zmienną ok.

Zestaw wyników pochodzi z pliku XML z wieloma elementami. Flaga (0 lub 1) jest wynikiem jednego z tych elementów, więc muszę wiedzieć, jak ustawić wynik tak, aby był tylko tą flagą.

Jeśli ktokolwiek mógłby pomóc, naprawdę bym to docenił.

Aktualizacja: Ostatecznie odczytałem wynik (0,1) z powrotem do SQL Server do tabeli flag. Następnie użył skryptu Execute SQL do odczytu go z SQL Server i do zmiennej. Nie jestem pewien, czy to najlepszy sposób na zrobienie tego, ale wydaje się, że to się udało.

Odpowiedz

9

Można użyć komponentu skryptu przepływu danych do przeniesienia wartości kolumny przepływu danych do zmiennej SSIS. Należy jednak przestrzegać pewnych zasad podczas pracy z komponentem Data Flow Script i zmiennymi SSIS.

SSIS nie pozwala na przypisanie wartości do zmiennych SSIS w procedurze skryptu przetwarzającej wiersze. Ale istnieją procedury przed i po wykonaniu, w których można obsłużyć zadanie.

W swoim komponencie skryptu dodaj zmienną SSIS do właściwości ReadWriteVariables. Edytuj skrypt i zadeklaruj zmienną w klasie ScriptMain. Użyj procedury PreExecute, aby zainicjować zmienną. Użyj procedury ProcessInputRow, aby przypisać wartość kolumna input -buffer do zmiennej skryptu. I użyj zadania PostExecute, aby przypisać wartość ze zmiennej skryptowej do zmiennej SSIS.

Oto przykładowy komponent skryptu VB. Ma zmienną SSIS (MyOutVariable), która pobiera dane wyjściowe zmiennej skryptowej (MyVar). Zmienna MyVar pobiera wartość z kolumny MyNumber w przepływie danych.

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

Począwszy SSIS 2012, można łatwo przypisać zmiennej wartość używając Expression zadań. Nie ma potrzeby pisania skryptu - którego większość z nas nieufnie podchodzi - do wykonania pozornie prostego zadania ustawiania wartości zmiennej.

Np .: Jeśli mam zmienną daty o nazwie Today i chcę przypisać jej wartość, mogę to łatwo wykonać w zadaniu Wyrażenie, jak pokazano poniżej.

enter image description here

Dalsze Reading: MSDN - SSIS Expression Task Documentation.

UWAGA:(Zaakceptowanych odpowiedź jest przestarzały.)

+0

Uwaga oryginalne pytanie ma 5 lat, przed SQL Server 2012. Wybrano odpowiedź była prawidłowa w tym czasie. – Pixelated

+0

Wiem.Zostawiłem tę notatkę w mojej odpowiedzi, aby ktoś przychodzący na to pytanie w 2016 r. Nie szedł tą drogą, jeśli używają SSIS 2012 lub> :) – Shiva

+1

@Shiva - Odpowiedź na SSIS 2012 wydaje się niekompletna - Pytanie zadaje jak ustawić zmienną za pomocą wartości uzyskanej z zadania przepływu danych. Jednak Wyrażenie Zadanie nie jest dostępne w przepływie danych (podczas gdy komponent skryptowy jest), więc musimy również wiedzieć, jak pobrać wartość z przepływu danych z powrotem do przepływu sterowania, aby następnie użyć zadania wyrażenia. – Voysinmyhead

Powiązane problemy