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:
cdc.fn_cdc_get_net_changes_<capture_instance> Bu sorgu için döndürülen her güncelleştirme için tek satır içeren son durumunu değiştirilen her satır.Çoğu durumda, net değişiklikler için bir sorgu tarafından döndürülen verileri yeterlidir.Daha fazla bilgi için bkz: cdc.fn_cdc_get_net_changes_<capture_instance> (Transact-sql).
cdc.fn_cdc_get_all_changes_<capture_instance> tüm değişiklikleri sırasında her satırda oluşmuş bu sorgu döndürüryakalama aralığı. Daha fazla bilgi için bkz: cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-sql).
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.
![]() |
---|
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:
Başlangıç tarihi/saati ve bitiş tarih/saat değerlerini aralık için.Sarıcı işlevleri sorgu aralığı için bitiş noktaları tarih/saat değerlerini kullanırken, değişiklik veri işlevleri kullanımı iki SSN değeri bitiş noktaları yakalayın.
Satır filtre.İşlevler, sarıcı işlevleri hem Değiştir veri yakalama için @row_filter_option parametresi aynıdır.Daha fazla bilgi için bkz: cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-sql) ve cdc.fn_cdc_get_net_changes_<capture_instance> (Transact-sql).
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
|