Aracılığıyla paylaş


Sorgu Değiştir veriler için hazırlık

Denetim akışında bir Integration Servicesartımlı bir yük değişiklik veri, üçüncü ve son görev yapan paketidir Değiştir veri sorgulayabilir ve veri akışı görev eklemek hazırlanmak için.

[!NOT]

İkinci görev akış denetimi için seçili zaman aralığı için değişiklik veri hazır olduğunu sağlamaktır. Bu görev hakkında daha fazla bilgi için bkz: Değiştir hazır veridir olup olmadığını belirleme. Denetimi akışı tasarlama işlemi açıklaması için bkz: (SSIS) verisini Değiştir yakalama.

Paketleri içinde değişiklik veri yakalama kullanımını gösteren eksiksiz, uçtan uca örnekler için bkz: Readme_Change Data Capture for Specified Interval Package Sampleve Readme_Change Data Capture since Last Request Package Sample.

Tasarım düşünceleri

Değiştir veri almak için aralığın bitiş noktaları girdi parametre olarak kabul eden bir Transact-sql tablo değerli işlev arayacak ve döner veri için belirtilen aralığı değiştirin. Veri akışının kaynak bileşeni bu işlevini çağırır. Bu kaynak bileşeni hakkında daha fazla bilgi için bkz: Alma ve değiştirme verileri anlama.

En sık kullanılan Integration Servicesole db kaynağı, ado kaynağı ve ado net kaynak, kaynak bileşenleri can't türetmek için tablo değerli işlev parametre bilgilerini. Bu nedenle, en kaynakları doğrudan Parametreli bir işlev çağrılamaz.

İşleve girdi parametreleri iletmek için iki Tasarım seçeneğiniz vardır:

  • Parametreli sorgu dizesi olarak bir araya. Katara dinamik bir sql dizesini parametre değerleri sabit kodlanmış bir araya getirmek için Script görev veya sql Yürüt görev kullanabilirsiniz. Sonra bu dizeyi bir paketi değişkeni depolamak ve kaynak bileşeni SqlCommand özelliğini ayarlamak için kullanın. Kaynak bileşeni artık parametre bilgisi gerektirdiği için bu yaklaşım başarılı olur.

    [!NOT]

    Önceden derlenmiş komut dosyası, sql Yürüt görev daha az yük doğurur.

  • Parametreli bir wrapper kullanmak. Alternatif olarak, parametreli tablo değerli işlev çağrıları bir wrapper Parametreli bir saklı yordam oluşturabilirsiniz. Bu yaklaşım başarılı, çünkü kaynak bileşeni başarıyla bir saklı yordam için parametre bilgilerini elde edebilirsiniz.

Bu konuda ilk tasarım seçeneğini kullanır ve parametreli sorgu dizesi olarak birleştirir.

Sorgu hazırlama

Size bir tek sorgu dizesine giriş parametreleri değerleri bir arada kullanabilirsiniz önce sorguyu gereken paketi değişkenleri ayarlamak zorunda.

Paketi değişkenleri ayarlamak için

  • De SQL Server Veri Akışı Araçları (SSDT), değişkenleri penceresinde sql Yürüt görev tarafından döndürülen sorgu dizesi tutmak için bir dize veri türündeki bir değişkeni oluşturun.

    Bu örnek, SqlDataQuery değişken adını kullanır.

Oluşturulan paketi değişken ile giriş parametrelerinin değerlerini art arda bağlamak için Script görev veya sql Yürüt görev kullanabilirsiniz. Aşağıdaki iki yordamdan bu bileşenleri konfigüre etme yöntemleri açıklanmaktadır.

Sorgu dizesi bitiştirmek için Script görev kullanın için

  1. Tarih Akış denetimi sekmesinde, Script görev için döngü kapsayıcı sonra pakete eklemek ve görev için döngü kapsayıcı bağlanın.

    [!NOT]

    Bu yordamı, paketi tek bir tablodan bir artımlı yük gerçekleştirir varsayılmaktadır. Paket birden çok tablodan yükler ve bir üst paketi ile birden çok alt paketleri varsa, bu görevin ilk bileşeni olarak her alt paketi eklenebilir. Daha fazla bilgi için, bkz. Birden çok tablo artımlı bir yük gerçekleştirmek.

  2. İçinde Komut dosyası görev Düzenleyicisi, Script sayfasında, aşağıdaki seçenekleri işaretleyin:

    1. İçin ReadOnlyVariablesseçin User::DataReady, User::ExtractStartTime, ve User::ExtractEndTime dan.

    2. İçin ReadWriteVariables, User::SqlDataQuery seçin.

  3. İçinde Komut dosyası görev Düzenleyicisi, Script sayfa'yı Komut dosyası Düzenle komut dosyası geliştirme ortamı açmak için.

  4. Ana yordamda aşağıdaki kodu kesimleri birini girin:

    • C# programlama, aşağıdaki kod satırlarını girin:

          int dataReady;
          System.DateTime extractStartTime;
          System.DateTime extractEndTime;
          string sqlDataQuery;
      
          dataReady = (int)Dts.Variables["DataReady"].Value;
          extractStartTime = (System.DateTime)Dts.Variables["ExtractStartTime"].Value;
          extractEndTime = (System.DateTime)Dts.Variables["ExtractEndTime"].Value;
      
          if (dataReady == 2)
            {
            sqlDataQuery = "SELECT * FROM CDCSample.uf_Customer('" + string.Format("{0:yyyy-MM-dd hh:mm:ss}", extractStartTime) + "', '" + string.Format("{0:yyyy-MM-dd hh:mm:ss}", extractEndTime) + "')";
            }
          else
            {
            sqlDataQuery = "SELECT * FROM CDCSample.uf_Customer(null" + ", '" + string.Format("{0:yyyy-MM-dd hh:mm:ss}", extractEndTime) + "')";
            }
      
          Dts.Variables["SqlDataQuery"].Value = sqlDataQuery;
      
          int dataReady;
          System.DateTime extractStartTime;
          System.DateTime extractEndTime;
          string sqlDataQuery;
      
          dataReady = (int)Dts.Variables["DataReady"].Value;
          extractStartTime = (System.DateTime)Dts.Variables["ExtractStartTime"].Value;
          extractEndTime = (System.DateTime)Dts.Variables["ExtractEndTime"].Value;
      
          if (dataReady == 2)
            {
            sqlDataQuery = "SELECT * FROM CDCSample.uf_Customer('" + string.Format("{0:yyyy-MM-dd hh:mm:ss}", extractStartTime) + "', '" + string.Format("{0:yyyy-MM-dd hh:mm:ss}", extractEndTime) + "')";
            }
          else
            {
            sqlDataQuery = "SELECT * FROM CDCSample.uf_Customer(null" + ", '" + string.Format("{0:yyyy-MM-dd hh:mm:ss}", extractEndTime) + "')";
            }
      
          Dts.Variables["SqlDataQuery"].Value = sqlDataQuery;
      

      - veya -

    • Sen de programlama Visual Basic, aşağıdaki kod satırlarını girin:

          Dim dataReady As Integer
          Dim extractStartTime As Date
          Dim extractEndTime As Date
          Dim sqlDataQuery As String
      
          dataReady = CType(Dts.Variables("DataReady").Value, Integer)
          extractStartTime = CType(Dts.Variables("ExtractStartTime").Value, Date)
          extractEndTime = CType(Dts.Variables("ExtractEndTime").Value, Date)
      
          If dataReady = 2 Then
            sqlDataQuery = "SELECT * FROM CDCSample.uf_Customer('" & _
                String.Format("{0:yyyy-MM-dd hh:mm:ss}", extractStartTime) & _
                "', '" & _
                String.Format("{0:yyyy-MM-dd hh:mm:ss}", extractEndTime) & _
                "')"
          Else
            sqlDataQuery = "SELECT * FROM CDCSample.uf_Customer(null" & _
                ", '" & _
                String.Format("{0:yyyy-MM-dd hh:mm:ss}", extractEndTime) & _
                "')"
          End If
      
          Dts.Variables("SqlDataQuery").Value = sqlDataQuery
      
          Dim dataReady As Integer
          Dim extractStartTime As Date
          Dim extractEndTime As Date
          Dim sqlDataQuery As String
      
          dataReady = CType(Dts.Variables("DataReady").Value, Integer)
          extractStartTime = CType(Dts.Variables("ExtractStartTime").Value, Date)
          extractEndTime = CType(Dts.Variables("ExtractEndTime").Value, Date)
      
          If dataReady = 2 Then
            sqlDataQuery = "SELECT * FROM CDCSample.uf_Customer('" & _
                String.Format("{0:yyyy-MM-dd hh:mm:ss}", extractStartTime) & _
                "', '" & _
                String.Format("{0:yyyy-MM-dd hh:mm:ss}", extractEndTime) & _
                "')"
          Else
            sqlDataQuery = "SELECT * FROM CDCSample.uf_Customer(null" & _
                ", '" & _
                String.Format("{0:yyyy-MM-dd hh:mm:ss}", extractEndTime) & _
                "')"
          End If
      
          Dts.Variables("SqlDataQuery").Value = sqlDataQuery
      
  5. Varsayılan satır döndüren kodu bırakın DtsExecResult.SuccessJavaScript yürütülmesine

  6. Komut dosyası geliştirme ortamı kapatın ve Komut dosyası görev Düzenleyicisi.

Sorgu dizesi art arda bağlamak için sql Yürüt görev kullanmak için

  1. Tarih Akış denetimi sekmesinde, sql Yürüt görev için döngü kapsayıcı sonra pakete eklemek ve bu görev için döngü kapsayıcı bağlanın.

    [!NOT]

    Bu yordamı, paketi tek bir tablodan bir artımlı yük gerçekleştirir varsayılmaktadır. Paket birden çok tablodan yükler ve bir üst paketi ile birden çok alt paketleri varsa, bu görevin ilk bileşeni olarak her alt paketi eklenebilir. Daha fazla bilgi için, bkz. Birden çok tablo artımlı bir yük gerçekleştirmek.

  2. İçinde Yürütme sql görev Düzenleyicisi, Genel sayfasında, aşağıdaki seçenekleri işaretleyin:

    1. İçin ResultSetseçin tek satır.

    2. Geçerli bir kaynak veritabanı bağlantısını yapılandırın.

    3. İçin SQLSourceTypeseçin doğrudan giriş.

    4. İçin SQLStatement, aşağıdaki sql deyimini girin:

      declare @ExtractStartTime datetime,
      @ExtractEndTime datetime, 
      @DataReady int
      
      select @DataReady = ?, 
      @ExtractStartTime = ?, 
      @ExtractEndTime = ?
      
      if @DataReady = 2
      select N'select * from CDCSample.uf_Customer'
      + N'('''+ convert(nvarchar(30),@ExtractStartTime,120)
      + ''', '''
      + convert(nvarchar(30),@ExtractEndTime,120) + ''') ' 
      as SqlDataQuery
      else
      select N'select * from CDCSample.uf_Customer'
      + N'(null, '''
      + convert(nvarchar(30),@ExtractEndTime,120)
      + ''') '
      as SqlDataQuery
      
      declare @ExtractStartTime datetime,
      @ExtractEndTime datetime, 
      @DataReady int
      
      select @DataReady = ?, 
      @ExtractStartTime = ?, 
      @ExtractEndTime = ?
      
      if @DataReady = 2
      select N'select * from CDCSample.uf_Customer'
      + N'('''+ convert(nvarchar(30),@ExtractStartTime,120)
      + ''', '''
      + convert(nvarchar(30),@ExtractEndTime,120) + ''') ' 
      as SqlDataQuery
      else
      select N'select * from CDCSample.uf_Customer'
      + N'(null, '''
      + convert(nvarchar(30),@ExtractEndTime,120)
      + ''') '
      as SqlDataQuery
      

      [!NOT]

      elseYan tümcesinde Bu örnek üretir sorgu Değiştir veri ilk yük için başlangıç tarihi ve saati için boş değer ileterek. Bu örnek, değişiklik veri yakalama etkinleştirilmeden önce yapılan değişiklikler de veri ambar karşıya yüklenecek olan senaryo gidermez.

  3. Tarih Parametre eşleme sayfası Yürütme sql görev Düzenleyicisi, aşağıdaki eşleme yapın:

    1. DataReady değişkeni 0 parametre eşleyin.

    2. Parametre 1 ExtractStartTime değişken eşleyin.

    3. ExtractEndTime değişkeni 2 parametre eşleyin.

  4. Tarih Sonuç kümesi sayfası Yürütme sql görev Düzenleyicisi, sonucu adı SqlDataQuery değişken eşleyin.

    Sonucu adı, SqlDataQuery döndürülen tek sütun addır.

Önceki yordamı sabit kodlanmış dize değerleri içeren bir sorgu dizesi giriş parametreleri için hazırlayan görev yapılandırma. Aşağıdaki kod, böyle bir sorgu dizesi örneğidir:

select * from CDCSample. uf_Customer('2007-06-11 14:21:58', '2007-06-12 14:21:58')

Veri akışı görev ekleme

Paket denetimi akışı tasarlama son adımında, veri akışı görev eklemektir.

Veri akışı görev eklemek ve denetimi akışı tamamlamak için

  • Tarih Akış denetimi sekmesinde, veri akışı görev eklemek ve sorgu dizesi birleştirilmiş görev bağlanın.

Sonraki Adım

Sorgu dizesi hazırlamak ve veri akışı görev yapılandırdıktan sonra sonraki adım olduğunu oluşturmak, değişiklik veri veritabanından alır tablo değerli işlev.

Sonraki Konu: Değişiklik veri almak için işlevi oluşturma

Integration Services simgesi (küçük) Integration Services ile güncel kalın

En son karşıdan yüklemeler, makaleler, örnekler ve Microsoft video yanı sıra topluluk seçili çözümleri için ziyaret Integration Servicesmsdn sayfası:


Bu güncelleştirmelerle ilgili otomatik bildirim almak için, sayfadaki RSS akışlarına abone olun.