Aracılığıyla paylaş


değiştirir<capture_instance> (Transact-sql)

Belirtilen lsn aralık içinde değişiklik her kaynak satırı için bir net değişim satır döndürür. Yani kaynak satır lsn aralığı içinde birden çok değişiklik varsa, son satırın içeriğini yansıtan tek bir satır işlevi tarafından döndürülür. Örneğin, bir işlem kaynak tablosunda bir satır ekler ve bir sonraki hareket lsn aralığı içinde bir veya daha fazla sütun satır güncelleştirir, işlev güncelleştirilmiş sütun değerleri içeren tek bir satır döndürür.

Bu numaralandırma işlevi, bir kaynak tablo Değiştir veri yakalama için etkin ve ağ izleme belirtilmediğinde oluşturulur. NET izlemeyi etkinleştirmek için kaynak tablonun birincil anahtar veya benzersiz dizin olması gerekir. İşlev adından türetilir ve biçimini kullanan cdc.fn_cdc_get_net_changes_capture_instanceburada capture_instancekaynak tablo Değiştir veri yakalama için etkinleştirilmiş olduğunda yakalama örneği için belirtilen değer. Daha fazla bilgi için, bkz. sys.sp_cdc_enable_table (Transact-sql).

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

cdc.fn_cdc_get_net_changes_capture_instance ( from_lsn , to_lsn , '<row_filter_option>' )

<row_filter_option> ::=
{ all
 | all with mask
 | all with merge
}

Bağımsız değişkenler

  • from_lsn
    Sonuçta eklemek için lsn aralığı düşük bitiş noktası temsil eden lsn ayarlayın. from_lsnis binary(10).

    İçinde yalnızca satırları cdc. [capture_instance] _ct bir değer içeren tabloyu değiştirmek __$start_lsndeğerinden büyük veya eşit from_lsnsonuç kümesinde bulunan.

  • to_lsn
    Sonuçta eklemek için lsn aralığı yüksek bitiş noktası temsil lsn ayarlayın. to_lsnis binary(10).

    İçinde yalnızca satırları cdc. [capture_instance] _ct değer içeren tabloyu değiştirmek __$start_lsneşit veya from_lsnveya eşit to_lsn sonuç kümesinde bulunan.

  • <row_filter_option>:: = {tüm | tüm maskeyle | tüm birleştirme ile}
    Meta veri sütunları yanı sıra sonuç kümesinde döndürülen satırların içeriğini yöneten bir seçenek. Aşağıdakilerden biri olabilir:

    • tüm
      Satır ve meta veri sütunları satır uygulamak için gerekli işlem lsn son değişikliği geri döner __$start_lsnve __$operation. Sütun __$update_maskher zaman null olur.

    • tüm maske ile
      Satır ve meta veri sütunları satır uygulamak için gerekli işlem lsn son değişikliği geri döner __$start_lsnve __$operation. Ayrıca, ne zaman bir update işlemi döndürür ( __$operation = 4) güncelleştirme güncellenmiştir Yakalanan sütunları döndürülen değeri işaretlenmiş __$update_mask.

    • tüm birleştirme ile
      Son değişiklik lsn meta veri sütunları satıra döner __$start_lsn. Sütun __$operationiki değerden biri olacaktır: Sil ve 5 değişikliği uygulamak için gerekli işlem ekleme veya güncelleştirme olduğunu belirtmek için 1. Sütun __$update_maskher zaman null olur.

      Mantığı kesin işlem için verilen değişiklik belirlemek için sorgu karmaşıklık ekler çünkü bu seçenek Değiştir veri uygulamak için gerekli işlem ekleme veya güncelleştirme olduğunu, ancak açıkça birbirinden ayırt etmek için gerekli değildir göstermek için yeterli olduğunda sorgu performansını artırmak için tasarlanmıştır. Bu seçenek bir mektup birleştirme işleminde olduğu gibi doğrudan hedef ortamlarda en ilgi çekici bir SQL Server 2012ortamı.

Dönen Tablo

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 satır iki sütunu değiştiriyorsa, örneğin, dört satır, her biri aynı içeren __$start_lsndeğer.

__$seqval

binary(10)

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

__$operation

int

Hedef veri kaynağına değişiklik veri satırı uygulamak için gerekli veri düzenleme dili (dml) işlemi tanımlar.

Eğer değeri row_filter_optionparametresi allya all with mask, bu sütundaki değer aşağıdaki değerlerden biri olabilir:

1 = silme

2 = Ekle

4 = güncelleştirme

Eğer değeri row_filter_optionparametresi all with merge,Bu sütundaki değer aşağıdaki değerlerden biri olabilir:

1 = silme

5 = INSERT veya update

Satır zaten var ve yalnızca güncelleştirilmesi gerekiyor ya da satır şu anda mevcut değildir ve eklenmelidir bilinmiyor 5 değeri gösterir.

__$update_mask

varbinary(128)

Yakalama örneği için tanımlanan her yakalanan sütun karşılık gelen bir bit bit maskesi. Bu değer 1 ne zaman ayarlamak tüm tanımlanmış bitler var __$operation= 1 ya da 2. Ne zaman __$operation= 3 ya da 4, bu bit yalnızca değiştirilen sütunları karşılık gelen 1'e ayarlanır.

<captured source table columns>

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 yakalanan sütun listesinde belirtilmiş olması durumunda, kaynak tablodaki tüm sütunlar döndürür.

İzinler

Üyelik sysadminsabit sunucu rolü veya db_ownerveritabanı rolü. Diğer tüm kullanıcılar için tüm yakalanan sütun kaynak tablo üzerinde select izni gerektirir ve yakalama örneği için gating rol tanımlanmışsa, bu üyelik veritabanı rolü. Arayan kaynak verileri görüntüleme iznine sahip değil, işlevin hata 208 (geçersiz nesne adı) döndürür.

Açıklamalar

Belirtilen lsn aralık içinde değişiklik yakalama örneği için zaman çizelgesinde izleme düşen değil, işlevin hata 208 (geçersiz nesne adı) döndürür.

Örnekler

Aşağıdaki örnek işlevini kullanan cdc.fn_cdc_get_net_changes_HR_ Department net değişiklikleri bildirmek için kaynak tablo yapılan HumanResources.Departmentsırasında belirli bir zaman aralığıyla.

İlk, GETDATEişlev zaman aralığının başlangıcını kutlamak için kullanılır. Kaynak tablo, çeşitli dml deyimlerini uygulandıktan sonra GETDATEişlevini yeniden sonuna kadar zaman aralığını tanımlamak için denir. İşlev sys.fn_cdc_map_time_to_lsn sonra bir değişiklik veri yakalama sorgu aralığı lsn değerler tarafından çevrelenen zaman aralığını eşleştirmek için kullanılır. Son olarak, bu işlev cdc.fn_cdc_get_net_changes_HR_Departmentkaynak tablo net değişiklikler için zaman aralığı almak için sorgulanır. Eklenen ve ardından Silinen satır işlevi tarafından döndürülen sonuç kümesi görünmez dikkat edin. Bunun nedeni, ilk eklenen ve bir sorgu penceresi içinde silinen satır aralığı için kaynak tablo net değişikliğe yol açmaz. Bu örnek çalıştırmadan önce ilk örnekte b çalıştırmanız sys.sp_cdc_enable_table (Transact-sql).

USE AdventureWorks2012;
GO
DECLARE @begin_time datetime, @end_time datetime, @from_lsn binary(10), @to_lsn binary(10);
-- Obtain the beginning of the time interval.
SET @begin_time = GETDATE() -1;
-- DML statements to produce changes in the HumanResources.Department table.
INSERT INTO HumanResources.Department (Name, GroupName)
VALUES (N'MyDept', N'MyNewGroup');

UPDATE HumanResources.Department
SET GroupName = N'Resource Control'
WHERE GroupName = N'Inventory Management';

DELETE FROM HumanResources.Department
WHERE Name = N'MyDept';

-- Obtain the end of the time interval.
SET @end_time = GETDATE();
-- Map the time interval to a change data capture query range.
SET @from_lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than or equal', @begin_time);
SET @to_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal', @end_time);

-- Return the net changes occurring within the query window.
SELECT * FROM cdc.fn_cdc_get_net_changes_HR_Department(@from_lsn, @to_lsn, 'all');

USE AdventureWorks2012;
GO
DECLARE @begin_time datetime, @end_time datetime, @from_lsn binary(10), @to_lsn binary(10);
-- Obtain the beginning of the time interval.
SET @begin_time = GETDATE() -1;
-- DML statements to produce changes in the HumanResources.Department table.
INSERT INTO HumanResources.Department (Name, GroupName)
VALUES (N'MyDept', N'MyNewGroup');

UPDATE HumanResources.Department
SET GroupName = N'Resource Control'
WHERE GroupName = N'Inventory Management';

DELETE FROM HumanResources.Department
WHERE Name = N'MyDept';

-- Obtain the end of the time interval.
SET @end_time = GETDATE();
-- Map the time interval to a change data capture query range.
SET @from_lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than or equal', @begin_time);
SET @to_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal', @end_time);

-- Return the net changes occurring within the query window.
SELECT * FROM cdc.fn_cdc_get_net_changes_HR_Department(@from_lsn, @to_lsn, 'all');

Ayrıca bkz.

Başvuru

CDC.fn_cdc_get_all_changes_<capture_instance> (Transact-sql)

sys.fn_cdc_map_time_to_lsn (Transact-sql)

sys.sp_cdc_enable_table (Transact-sql)

sys.sp_cdc_help_change_data_capture (Transact-sql)

Kavramlar

Değişiklik veri yakalama hakkında