Aracılığıyla paylaş


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

Denetim akış tamamladıktan sonra bir Integration Servicesartımlı bir yük değişiklik veri, sonraki görev yapan paketidir, değişiklik veri alan bir tablo değerli işlev oluşturmak için. Bir süre önce ilk artımlı yükü bu işlevi oluşturmak yeterlidir.

[!NOT]

Değiştirmek veri paket oluşturma sürecinde ikinci adım gerçekleştirir artımlı bir yük almak için işlevi oluşturma verileri değiştirin. Bu paket oluşturma işlemindeki 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.

Işlevler tasarımları Değiştir veri yakalama

Değişiklik veri almak için bir kaynak bileşen paketi veri akışı aşağıdaki değişiklik veri yakalama sorgu işlevlerinden birini çağırır:

  • değiştirir<capture_instance > Bu sorgu için tek bir satır döndürülen her güncelleştirme değişen her satırın son durumunu içeren için. Çoğu durumda, sadece net değişiklik için bir sorgu tarafından döndürülen verileri gerekir. Daha fazla bilgi için, bkz. değiştirir<capture_instance> (Transact-sql).

  • CDC.fn_cdc_get_all_changes_<capture_instance > Bu sorgu meydana gelen tüm değişiklikleri her satır döndürür yakalama aralığı sırasında. Daha fazla bilgi için, bkz. CDC.fn_cdc_get_all_changes_<capture_instance> (Transact-sql).

Kaynak bileşen sonra işlev tarafından döndürülen sonuçlarını alır ve akım dönüşümleri ve hedefleri, nihai hedefe Değiştir veri geçerli geçirir.

Ancak, bir Integration Serviceskaynak bileşeni bu değişiklik veri yakalama işlevleri doğrudan arama yapamazsınız. Bir Integration Serviceskaynak bileşeni gerektiren meta veri sütunları sorgunun döndürdüğü hakkında. Değişiklik veri yakalama işlevleri kendi çıkış tablosunun sütunlarını tanımlamak değil. Böylece, bu işlevler için yeterli meta verileri dönmek bir Integration Serviceskaynak bileşeni.

Bunun yerine bu tür bir işlevi kendi döndürür yan tümcesinde onun çıkış tablo sütunları açıkça tanımladığından bir sarmalayıcı tablo valued işlevini kullanın. Bu açık tanımı sütun meta verileri sağlayan bir Integration Serviceskaynak bileşen gereksinimlerini. Değişiklik veri almak istediğiniz her tablo için bu işlev oluşturmak zorunda.

Değişiklik veri yakalama sorgu işlevini çağırır sarmalayıcı tablo değerli işlev oluşturmak için iki seçeneğiniz vardır:

  • Sen-ebilmek seslenmek gösterirsys.sp_cdc_generate_wrapper_functiontüm sistem saklı yordamı, tablo değerli işlevler için oluşturmak için.

  • Bu konudaki kurallar ve örneği kullanarak kendi tablo değerli işlev yazabilirsiniz.

Tablo değerli işlev oluşturmak için saklı yordam çağırma

Aramak için gereken tablo değerli işlevler oluşturmak için hızlı ve kolay bir yol olduğunu sys.sp_cdc_generate_wrapper_function sistem saklı yordamını. Bu saklı yordam özel ihtiyaçlarını karşılamak üzere tasarlanmış sarıcı işlevleri oluşturmak üzere komut dosyaları üreten bir Integration Serviceskaynak bileşeni.

Önemli notÖnemli

Gösterirsys.sp_cdc_generate_wrapper_functiontüm sistem saklı yordamını doğrudan oluşturma sarıcı işlevleri. Bunun yerine, saklı yordam sarıcı işlevleri için oluşturma komut dosyaları oluşturur. Geliştirici, saklı yordam bir artımlı yük paketi olabilir önce oluşturduğu oluşturma komut dosyaları arama sarmalayıcı işlevleri çalıştırmanız gerekir.

Bu sistem saklı yordamını nasıl anlamak için yordamı, hangi komut yordamı oluşturur, ne anlamak ve komut dosyalarını hangi wrapper işlevler oluşturmak.

Anlama ve saklı yordamı kullanma

Gösterirsys.sp_cdc_generate_wrapper_functiontüm sistem saklı yordamı oluşturur sarıcı işlevleri tarafından kullanılmak üzere oluşturmak için komut dosyası Integration Servicespaketleri.

İşte ilk birkaç satırı saklı yordam tanımı:

CREATE PROCEDURE sys.sp_cdc_generate_wrapper_function

(

@capture\_instance sysname = null

@closed\_high\_end\_point bit = 1,

@column\_list = null,

@update\_flag\_list = null

)

Saklı yordam için tüm parametreler isteğe bağlıdır. Saklı yordam parametreler için değerler sağlayarak olmadan çağırırsanız, sarıcı işlevleri erişimi olan tüm yakalama örnekleri için saklı yordam oluşturur.

[!NOT]

Daha fazla bu sözdizimi hakkında bilgi için bkz: saklı yordam ve parametrelerinin, gösterirsys.sp_cdc_generate_wrapper_functiontüm (Transact-sql).

Saklı yordam, her zaman tüm değişiklikleri her yakalama örneği dönmek için sarmalayıcı işlevi oluşturur. Eğer @supports\_net\_changesparametresi ayarlanmış yakalama örneği oluşturulduğunda, saklı yordam ayrıca net değişiklikleri her uygulanabilir yakalama örneği dönmek için sarmalayıcı işlevi oluşturur.

Saklı yordam, bir sonuç kümesi ile iki sütun döndürür:

  • Saklı yordam oluşturduğu işlevi adı. Bu saklı yordam işlevi yakalama örnek adı adından türetilmiştir. (İşlev 'fn_all_changes_' adıdır yakalama örneği adı izler. Oluşturulursa, net değişiklikleri işlevi için kullanılan öneki 'fn_net_changes_' dir.)

  • create deyimi için sarmalayıcı işlevi.

Anlama ve saklı yordam tarafından oluşturulan komut dosyalarını kullanma

Genellikle, bir geliştirici bir ekleme kullanmak istiyorsunuz...exec deyimi aramak için gösterirsys.sp_cdc_generate_wrapper_functiontüm saklı yordamı ve geçici tabloya saklı yordamı oluşturur komut dosyalarını kaydedin. Her komut dosyası daha sonra olabilir tek tek seçilen ve ilgili işlevi oluşturmak için çalıştırırsınız. Ancak, bir geliştirici Ayrıca sql komutları bir dizi tüm oluşturma komut çalıştırmak için aşağıdaki örnek kodda gösterildiği gibi kullanabilirsiniz:

create table #wrapper_functions
      (function_name sysname, create_stmt nvarchar(max))
insert into #wrapper_functions
exec sys.sp_cdc_generate_wrapper_function

declare @stmt nvarchar(max)
declare #hfunctions cursor local fast_forward for 
      select create_stmt from #wrapper_functions
open #hfunctions
fetch #hfunctions into @stmt
while (@@fetch_status <> -1)
begin
      exec sp_executesql @stmt
      fetch #hfunctions into @stmt
end
close #hfunctions
deallocate #hfunctions

create table #wrapper_functions
      (function_name sysname, create_stmt nvarchar(max))
insert into #wrapper_functions
exec sys.sp_cdc_generate_wrapper_function

declare @stmt nvarchar(max)
declare #hfunctions cursor local fast_forward for 
      select create_stmt from #wrapper_functions
open #hfunctions
fetch #hfunctions into @stmt
while (@@fetch_status <> -1)
begin
      exec sp_executesql @stmt
      fetch #hfunctions into @stmt
end
close #hfunctions
deallocate #hfunctions

Anlama ve saklı yordam tarafından oluşturulan işlevleri kullanma

Sistematik olarak yakalanan Değiştir veri çizelgesi yürümek için oluşturulan sarıcı işlevleri bekliyoruz @end\_timeparametresi için bir Aralık-ecek var olmak @start\_timeparametresi sonraki aralığı için. Bu Kongre izlendiğinde, oluşturulan sarıcı işlevleri aşağıdaki görevleri yapabilirsiniz:

  • Tarih/Saat değerleri dahili olarak kullanılan lsn değerleri eşleyin.

  • Hiçbir veri kaybı veya tekrarlanan emin olun.

Basit bir değişiklik tablonun tüm satırlar için sorgulama yapmak için aşağıdaki kurallar da üretilen sarmalayıcı işlevleri destekler:

  • @ Start_time parametre null ise, sarıcı işlevleri sorgu alt sınır olarak yakalama örneği en düşük lsn değerini kullanın.

  • @ End_time parametre null ise, sarıcı işlevleri sorgu üst sınır yakalama örneği en yüksek lsn değeri kullanın.

Çoğu kullanıcı-meli muktedir kullanma sarmalayıcı işlevleri sys.sp_cdc_generate_wrapper_function sistem saklı yordam, değişiklik olmadan oluşturur. Ancak, sarıcı işlevleri özelleştirmek için oluşturma komut dosyaları, komut dosyalarını çalıştırmadan önce özelleştirme gerekir.

Paketinizi sarıcı işlevleri aradığında, paketi üç parametre değerlerini sağlamanız gerekir. Değişiklik veri işlevleri yakalama üç parametre kullanmak gibi bu üç parametre vardır. Bu üç parametreleri aşağıdaki gibidir:

  • Başlangıç tarihi/saati ve bitiş tarihi/saati değer aralığı için. Sarmalayıcı işlevleri sorgu aralığı için bitiş noktaları Tarih/Saat değerlerini kullanırken, değişiklik veri işlevleri kullanımı iki lsn değeri bitiş noktaları yakalayın.

  • Satır filtre. İşlevler, sarıcı işlevleri ve değişiklik veri yakalama için @row\_filter\_optionparametresi aynıdır. Daha fazla bilgi için CDC.fn_cdc_get_all_changes_<capture_instance> (Transact-sql)ve değiştirir<capture_instance> (Transact-sql).

Aşağıdaki veri sarmalayıcı işlevleri includesthe tarafından döndürülen sonuç kümesi:

  • Tüm istenen sütunların veri değiştirin.

  • Bir sütun, bir veya iki karakterlik alan satır ile ilişkili olan işlemi tanımlamak için kullandığı verir__cdc_operation adlı. Bu alan için geçerli değerler aşağıdaki gibidir: 'Ben' için INSERT, 'd' silmek için 'uo' için güncelleştirme eski değerleri ve 'un' için yeni değerleri güncelleştir.

  • Onları, sonra işlem kodunun ve belirtilen sırada bit sütun olarak beliren istediğinde bayrakları, güncelleştirme @update\_flag\_listparametresi. Bu sütunları ilişkili sütun adı '_uflag' eklenerek adlandırılır.

Sarmalayıcı işlevi, paket için tüm değişiklikleri sorguladığı bir sarmalayıcı işlevi çağırırsa, sütunlar, __cdc_startlsn ve __cdc_seqval döndürür. Bu iki sütunu birinci ve ikinci sütununda, sırasıyla, sonuç kümesi olur. Sarmalayıcı işlevi de bu iki sütunları temel alan sonuç kümesini sıralar.

Kendi tablo değerli işlev yazma

Ayrıca SQL Server Management Studiokendi sarmalayıcı tablo değerli işlev değişiklik veri yakalama sorgu işlevi ve tablo valued sarıcı saklamak aramalar içinde fonksiyonu yazmak için SQL Server. Transact-sql işlevi oluşturma hakkında daha fazla bilgi için bkz: CREATE FUNCTION (Transact-SQL).

Aşağıdaki örnek, değişiklik bir Müşteri tablosundan alır belirtilen değişim aralığı için tablo değerli bir işlevi tanımlar. Eşlemek için bu işlevi kullanır değişiklik veri yakalama işlevleri datetimedeğerler ikili günlük sıra numarası (lsn) değerleri dahili olarak değişiklik tabloları kullanan. Bu işlev Ayrıca birkaç özel koşullarını işleme:

  • Boş değer için başlangıç saatini geçirildiğinde, bu işlev kullanılabilir en erken değeri kullanır.

  • Boş değer için bitiş saatini geçirildiğinde, bu işlev kullanılabilir en son değeri kullanır.

  • Ne zaman başlangıç lsn genellikle gösterir seçili aralığı için kayıt vardır, bu işlev çıkar bitiş lsn eşittir.

Değiştir veri sorgular tablo değerli fonksiyon örneği

CREATE function CDCSample.uf_Customer (
     @start_time datetime
    ,@end_time datetime
)
returns @Customer table (
     CustomerID int
    ,TerritoryID int
    ,CustomerType nchar(1)
    ,rowguid uniqueidentifier
    ,ModifiedDate datetime
    ,CDC_OPERATION varchar(1)
) as
begin
    declare @from_lsn binary(10), @to_lsn binary(10)

    if (@start_time is null)
        select @from_lsn = sys.fn_cdc_get_min_lsn('Customer')
    else
        select @from_lsn = sys.fn_cdc_increment_lsn(sys.fn_cdc_map_time_to_lsn('largest less than or equal',@start_time))

    if (@end_time is null)
        select @to_lsn = sys.fn_cdc_get_max_lsn()
    else
        select @to_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal',@end_time)

    if (@from_lsn = sys.fn_cdc_increment_lsn(@to_lsn))
        return

    -- Query for change data
    insert into @Customer
    select 
        CustomerID,    
        TerritoryID, 
        CustomerType, 
        rowguid, 
        ModifiedDate, 
        case __$operation
                when 1 then 'D'
                when 2 then 'I'
                when 4 then 'U'
                else null
         end as CDC_OPERATION
    from 
        cdc.fn_cdc_get_net_changes_Customer(@from_lsn, @to_lsn, 'all')

    return
end 
go

CREATE function CDCSample.uf_Customer (
     @start_time datetime
    ,@end_time datetime
)
returns @Customer table (
     CustomerID int
    ,TerritoryID int
    ,CustomerType nchar(1)
    ,rowguid uniqueidentifier
    ,ModifiedDate datetime
    ,CDC_OPERATION varchar(1)
) as
begin
    declare @from_lsn binary(10), @to_lsn binary(10)

    if (@start_time is null)
        select @from_lsn = sys.fn_cdc_get_min_lsn('Customer')
    else
        select @from_lsn = sys.fn_cdc_increment_lsn(sys.fn_cdc_map_time_to_lsn('largest less than or equal',@start_time))

    if (@end_time is null)
        select @to_lsn = sys.fn_cdc_get_max_lsn()
    else
        select @to_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal',@end_time)

    if (@from_lsn = sys.fn_cdc_increment_lsn(@to_lsn))
        return

    -- Query for change data
    insert into @Customer
    select 
        CustomerID,    
        TerritoryID, 
        CustomerType, 
        rowguid, 
        ModifiedDate, 
        case __$operation
                when 1 then 'D'
                when 2 then 'I'
                when 4 then 'U'
                else null
         end as CDC_OPERATION
    from 
        cdc.fn_cdc_get_net_changes_Customer(@from_lsn, @to_lsn, 'all')

    return
end 
go

Değişiklik veri ile ek meta veri alma

Daha önce gösterilen kullanıcı tarafından oluşturulan tablo değerli işlev yalnızca kullansa __$ işlem sütununda değiştirir<capture_instance > işlevi dört sütun meta verileri her değişiklik satır. Bu değerler, veri akışı kullanmak isterseniz, bunları sarmalayıcı tablo değerli işlev ek sütunlar dönebilirsiniz.

Sütun adı

Veri türü

Açıklama

__$ start_lsn

binary(10)

lsn değişikliği tamamlama hareket ile ilişkili.

Aynı hareket kaydedilmiş tüm değişiklikleri aynı kayıt lsn paylaşın. Değişikliği tablo kaynak tablo güncelleştirme işlemi iki farklı satırları değiştirir, örneğin, dört satır (iki eski değerleri ile) ve iki yeni değerlerle içeren her ile aynı __$ start_lsn değer.

__$ seqval

binary(10)

Bir hareket içinde satır değişiklikleri sipariş için kullanılan sıra değeri.

__$ işlem

int

Değişikliği ile ilişkili veri düzenleme dili (dml) işlemi. Aşağıdakilerden biri olabilir:

1 = silme

2 = Ekle

3 = güncelleştirme (değerler güncelleştirme işleminden önce.)

4 = Güncelleştirme (değerleri güncelleştirme işlemi sonra.)

__$ update_mask

varbinary(128)

Değiştirilen bu sütunları tanımlama değişiklik tablonun sütun sıra sayıları temel alan bir bit maskesi. Eğer hangi sütunların değiştirilmiş belirlemek zorunda bu değer incelemek.

<Yakalanan kaynak tablo sütunları>

değişir

İşlev tarafından döndürülen kalan sütunları yakalama örneği oluşturulduğunda, yakalanan sütun olarak tespit edilmiştir kaynak tablo sütunları olan. Hiçbir sütun başlangıçta yakalanan sütun listesinde belirtilmiş olması durumunda, kaynak tablodaki tüm sütunlar döndürür.

Daha fazla bilgi için, bkz. değiştirir<capture_instance> (Transact-sql).

Sonraki Adım

Değiştir veri sorgular tablo değerli işlev oluşturduktan sonra sonraki adıma paketi veri akışı tasarlama başlatmaktır.

Sonraki Konu: Alma ve değiştirme verileri anlama

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.