2010-10-13 21 views
10

değişkenine ayarlandı. Kendime bir tür stresle ilgili kalp krizi geçirmeden önce.SSIS, veri akışından

Tek bir veri akışı görevinin sonuç kümesini (sonuç 0 veya 1 olacak şekilde) ayarlama ve bu değeri bir değişkene atama gibi basit bir şekilde görevin nasıl tamamlanacağını bilen biri olur muydu?

Değişkeni oluşturdum tamam.

Sonuç kümesi, birden çok öğeye sahip bir XML dosyasından gelir. Bayrak (0 veya 1), bu elemanlardan birinin sonucudur, bu yüzden sonuç kümesinin sadece bu bayrağın nasıl elde edileceğini bilmem gerekiyor.

Eğer herhangi biri yardım ederse gerçekten çok memnun olurum.

Güncelleştirme: Sonuç olarak sonucu (0,1) SQL Server'a bir bayrak tablosuna geri okuyorum. Ardından, SQL Server'dan ve bir değişkene geri okumak için bir Execute SQL betiği kullanılır. Bunun yapmanın en iyi yolu olup olmadığından emin değil, ancak hile yapmış gibi görünüyor.

cevap

9

Veri akışı sütun değerini bir SSIS değişkenine aktarmak için bir Veri Akış Komut Dosyası bileşeni kullanabilirsiniz. Ancak, Veri Akış Komut Dosyası bileşeni ve SSIS değişkenleriyle çalışırken belirli kuralları izlemeniz gerekir.

SSIS, satırları işleyen komut dosyası yordamında SSIS değişkenlerine değer atamanıza izin vermez. Ancak, atamayı yapabileceğiniz işlem öncesi ve sonrası prosedürler vardır.

Komut dosyanızda, SSIS değişkenini ReadWriteVariables özelliğine ekleyin. Komut dosyasını düzenleyin ve ScriptMain sınıfında bir değişken bildirin. Değişkeni başlatmak için PreExecute prosedürünü kullanın. Input -buffer sütun değerini script değişkenine atamak için ProcessInputRow prosedürünü kullanın. Ve, komut değişkeninden SSIS değişkenine değer atamak için PostExecute görevini kullanın.

Örnek bir VB komut bileşeni. Komut dosyası değişkeni (MyVar) çıktısını alacak bir SSIS değişkeni (MyOutVariable) vardır. MyVar değişkeni, veri akışındaki MyNumber sütunundan değeri alır.

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

SSIS 2012 ile başlayarak, kolayca Expression Görev kullanarak bir değişkene bir değer atayabilirsiniz. Bir değişkenin değerini ayarlamak gibi basit bir görevi yerine getirebilmek için çoğumuzun ihtiyatlı olduğu bir Senaryo yazmaya gerek yoktur.

Ör: Ben Today adında bir tarih değişkeni var ve bunu bir değer atamak isterseniz, aşağıda gösterildiği gibi, bu kadar kolay İfade görev yapabilirsiniz.

enter image description here

Ek Okuma: MSDN - SSIS Expression Task Documentation.

NOT:(kabul yanıt modası geçmiş.)

+0

Not orijinal soru öncesi SQL Server 2012. Seçilmiş cevabı zamanda doğru 5 yaşındadır. – Pixelated

+0

Biliyorum.Bu notu benim cevabımda bıraktım, böylece 2016'da bu soruya gelen bir kişi SSIS 2012 kullanıyorsa ya da> :) – Shiva

+1

@Shiva kullanıyorsa bu yoldan gitmiyor - SSIS 2012 uygulanabilir cevabı eksik görünüyor - Soru sorar Bir veri akışı görevinden elde edilen bir değer ile bir değişken nasıl ayarlanır. Ancak, Expression Task, bir veri akışı içinde mevcut değildir (komut dosyası bileşeni ise), bu yüzden de ifade görevini kullanmak için veri akışından kontrol akışına geri giden değeri nasıl alacağımızı bilmemiz gerekir. – Voysinmyhead