Aracılığıyla paylaş


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

denetim akışı tamamladıktan sonra bir Integration Services Sonraki görev paket, artımlı bir yük gerçekleştirir, verileri değiştirme, oluşturma bir tablo değerli işlev, alır değişiklik veri.saat önce ilk artımlı yükü bu işlev oluşturmak yeterlidir.

Not

Artımlı bir yük, bir paket oluşturma sürecinde ikinci adımı gerçekleştirir veridir değişikliği almak için işlev oluşturma verileri değiştirir.Bu paket oluşturmak için genel işlem açıklaması için bkz: Değiştir ile veri yakalama artımlı geliştirme yükler.

Paketlerdeki Değiştir veri yakalama kullanımını gösteren tam ve uçtan uca örnekler görmek için bkz: Integration Services örnekleri üzerinde Codeplex.

İşlevler Tasarımları Değiştir veri yakalama

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

Kaynak bileşen sonra alır sonuçlar işlev tarafından döndürülen ve onları aşağı akım Dönüşümleri ve hedefleri, son hedef Değiştir veri uygulamak geçirir.

Ancak, bir Integration Services kaynak bileşeni cannot call bu değişiklik veri yakalama işlevleri doğrudan.Bir Integration Services meta veriler sütunları hakkında kaynak bileşeni gerektiriyor, sorgu döndürür.Değişiklik veri yakalama işlevleri kendi çıktı sütunları tanımlamak tablo.Bu nedenle, bu işlevler için yeterli meta veriler dönmek değil bir Integration Services kaynak bileşeni.

Bunun yerine, bu tür bir işlevi kendi DÖNDÜRÜR yan tümce tümce tümcesinde, çıkış tablosunun sütunları açıkça tanımladığından bir sarmalayıcı tablo değerli işlev kullanın.Bu sütun açık tanımını meta veriler sağlayan bir Integration Services kaynak 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:

  • Arayabileceğiniz sys.sp_cdc_generate_wrapper_function sistem saklı yordamı sizin için tablo değerli işlevler oluşturmak için.

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

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

Çağırmak için gereksinim duyduğunuz tablo değerli işlevler oluşturmak için en hızlı ve en kolay yolu olan sys.sp_cdc_generate_wrapper_function sistem saklı yordamı.Bu saklı yordam özellikle gereksinimlerini karşılamak üzere tasarlanmış sarıcı işlevleri oluşturmak üzere komut dosyaları oluşturur bir Integration Services kaynak bileşeni.

Önemli notÖnemli

The sys.sp_cdc_generate_wrapper_function system stored procedure does not directly create the wrapper functions.Bunun yerine, saklı yordam sarıcı işlevleri için oluşturma komut dosyaları oluşturur.Geliştirici oluşturma komut dosyaları, çalıştırmanız gerekir artımlı yük paket sarıcı işlevleri aramadan önce saklı yordam oluşturur.

Bu nasıl anlamak için sistem saklı yordamı, yordam, hangi komut dosyası yordamı oluşturur, yaptığı anlamalısınız ve komut dosyalarını hangi sarmalayıcı işlevleri oluşturun.

Anlama ve saklı yordamı kullanma

The sys.sp_cdc_generate_wrapper_function system stored procedure generates scripts to create wrapper functions for use by Integration Services packages.

Saklı yordam definition ilk birkaç satırını şunlardır:

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 parametreleri için değerleri girmeden çağırırsanız erişim sahip yakalama örnekleri için sarıcı işlevleri saklı yordam oluşturur.

Not

Bu sözdizimi hakkında daha fazla bilgi Bkz: saklı yordam ve varsa parametreleri, sys.sp_cdc_generate_wrapper_function (Transact-sql).

Saklı yordam her yakalama tüm değişiklikleri geri dönmek için sarmalayıcı işlev oluşturur her zaman örnek.If the @supports_net_changes parameter was set when the capture instance was created, the stored procedure also generates a wrapper function to return net changes from each applicable capture instance.

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

  • Saklı yordam üretti sarmalayıcı işlev adı.Bu saklı yordam, işlev adı yakalama örnek adı adından türer.(işlev 'fn_all_changes_' addır Yakalama örnek adından.Oluşturulursa, net değişiklikleri işlev için kullanılan öneki 'fn_net_changes_' dir.)

  • create deyim için sarmalayıcı işlev.

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

Genellikle, bir geliştirici bir INSERT kullanır...exec deyim aramak için sys.sp_cdc_generate_wrapper_function saklı yordam ve saklı yordam için oluşturduğu komut dosyalarını kaydedin bir geçici tablo.Her komut dosyası sonra ayrı ayrı seçilebilen ve karşılık gelen sarmalayıcı işlev oluşturmak için çalıştırırsınız.Ancak, bir geliştirici bir de küme sql create çalıştırılacak komutlarını komut dosyası, aşağıdaki örnek kodda gösterildiği gibi:

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şlevler kullanma

Yakalanan Değiştir veri çizelgesinin sistematik Yürüyüş, üretilen sarıcı işlevleri, beklediğiniz @end_time bir zaman aralığı için parametre olacaktır @start_time parametresi için sonraki aralığı.Bu kuralı izlendiğinde, üretilen sarıcı işlevleri aşağıdaki görevleri yapabilirsiniz:

  • Tarih/saat değerleri dahili olarak kullanılan SSN değerleri eşleyin.

  • Hiçbir veri kayıp veya yinelenen emin olun.

Bir değişiklik tüm satırlar için sorgulama yapmak için tablo daha basit, üretilen sarıcı işlevleri aşağıdaki kurallar da destekler:

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

  • @ End_time parametre null ise, sarıcı işlevleri yakalamada en yüksek SSN değeri kullanmak örnek sorgu üst sınır olarak.

Çoğu kullanıcı kullanabilir, sarıcı işlevleri sys.sp_cdc_generate_wrapper_function sistem saklı yordamı hiçbir değişikliğe gerek olmadan oluşturur.Ancak, sarıcı işlevleri özelleştirmek için oluşturma komut dosyaları, komut dosyalarını çalıştırmadan önce özelleştirmek gerekir.

Paketinizi wrapper işlevlerini çağırdığında paket üç parametre değerlerini sağlamanız gerekir.Değişiklik veri işlevleri yakalama üç parametre kullanmak gibi bu üç parametre değildir.Bu üç parametreleri aşağıdaki gibidir:

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

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

  • Bir sütun, bir veya iki karakter alan satır ile ilişkili olan işlemi tanımlamak için kullandığı __CDC_OPERATION adlı.Bu alan için geçerli değerler şunlardır: İçin Ekle, ' ı' 'd' delete için 'uo' güncelleştirme eski değerleri ve 'un' güncelleştirme yeni değerler için.

  • Bunları sonra sütunlar bit olarak görünen istediğinde güncelleştirme bayraklarıyla, işlem kodu ve belirtilen sırada @update_flag_list parametresi.Bunlar sütuns '_uflag' ilişkili ekleyerek adında sütun adı.

Yoksa sizin paket sorguları tüm değişiklikleri için sarmalayıcı işlevi de __cdc_startlsn ve __cdc_seqval sütunları döndüren bir sarmalayıcı işlevi çağırır.Bu iki sütunu birinci ve ikinci sütun haline gelir, sırasıyla, sonuç küme.Sarmalayıcı işlev de sıralar sonuç küme bu iki sütunları temel alan.

Kendi tablo değerli işlev yazma

Ayrıca SQL Server Management Studio , değişiklik veri yakalama sorgu işlevi ve tablo değerli sarıcı saklamak işlev çağrıları kendi sarmalayıcı tablo değerli fonksiyon yazmak için SQL Server.Transact-sql işlev oluşturma hakkında daha fazla bilgi için bkz: CREATE FUNCTION (Transact-SQL).

Aşağıdaki örnek, değişiklik için belirtilen değişiklik aralığı bir Müşteri tablosundan alır tablo değerli işlev tanımlar.Eşlemek için bu işlev kullanır Değiştir veri yakalama işlevleri datetime değerleri için ikili günlük sıra numarası (SSN) değerlerini Değiştir tablolar dahili olarak kullanır.Bu işlev, birkaç özel koşullar da işler:

  • Ne zaman bir null değeri iletilir başlatmak için saat, bu işlev kullanılabilir en erken değeri kullanır.

  • Ne zaman bir null değeri iletilir bitiş için saat, bu işlev kullanılabilir en son değeri kullanır.

  • Ne zaman başlangıç SSN genellikle gösterir seçili aralığı için kayıt yok, bu işlev çıkar bir bitiş SSN 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

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 da __$ işlemi sütun, cdc.fn_cdc_get_net_changes_<capture_instance> işlevini verir, dört sütun meta veriler için her değişiklik satırBu değerler kullanmak istiyorsanız, sizin veri akışı, bunları sarmalayıcı tablo değerli işlev olarak ek sütunları dönebilirsiniz.

Sütun adı

Veri türü

Açıklama

__$ start_lsn

binary(10)

SSN değişikliği yürütme hareket ile ilişkili.

Tüm değişiklikleri aynı harekette kaydedilmiş aynı yürütme SSN paylaşın.Örneğin, kaynak tablodaki bir güncelleştirme işlemi iki farklı satırları değiştirir, dört satır (iki eski değerlerle) ve iki yeni değerlerle değişiklik tablo içerecek her biri aynı __$ start_lsn değer.

__$ seqval

binary(10)

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

__$ işlemi

int

veri işleme dili (dml) işlemi değişikliği ile ilişkili.Aşağıdakilerden biri olabilir:

1 = delete

2 = Ekle

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

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

__$ update_mask

varbinary(128)

Değiştirilen bu sütunları tanımlama değişikliği tablo sütun sıra sayıları temel alan bir bit maskesi.Hangi sütunların değiştirilmiş belirlemek gerekiyordu, bu değer incelemek.

<Yakalanan kaynak tablo sütunları>

değişir

Yakalama örnek oluşturulduğunda, yakalanan sütun olarak tanımlananların kaynak Tablo sütunlarından işlev tarafından döndürülen kalan sütunları olan.Hiçbir sütun başlangıçta yakalanan sütun listesinde, tüm sütunları kaynak belirtilmiş olması durumunda tablo döndürülür.

Daha fazla bilgi için bkz: cdc.fn_cdc_get_net_changes_<capture_instance> (Transact-sql).

Sonraki Adım

Değişiklik veri sorgular tablo değerli işlev oluşturduktan sonra sonraki adıma paket 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 seçilen topluluk çözümleri yanı sıra Microsoft videolar için ziyaret Integration Services sayfa msdn veya TechNet:

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