Bagikan melalui


<cdc.fn_cdc_get_all_changes_capture_instance> (T-SQL)

Berlaku untuk:SQL Server

Mengembalikan satu baris untuk setiap perubahan yang diterapkan ke tabel sumber dalam rentang nomor urutan log (LSN) yang ditentukan. Jika baris sumber memiliki beberapa perubahan selama interval, setiap perubahan diwakili dalam tataan hasil yang dikembalikan. Selain mengembalikan data perubahan, empat kolom metadata memberikan informasi yang Anda butuhkan untuk menerapkan perubahan ke sumber data lain.

Opsi pemfilteran baris mengatur konten kolom metadata dan baris yang dikembalikan dalam tataan hasil. Saat opsi semua filter baris ditentukan, setiap perubahan memiliki tepat satu baris untuk mengidentifikasi perubahan. Saat opsi semua pembaruan lama ditentukan, operasi pembaruan diwakili sebagai dua baris: satu berisi nilai kolom yang diambil sebelum pembaruan dan yang lain yang berisi nilai kolom yang diambil setelah pembaruan.

Fungsi enumerasi ini dibuat pada saat tabel sumber diaktifkan untuk mengubah pengambilan data. Nama fungsi diturunkan dan menggunakan format cdc.fn_cdc_get_all_changes_<capture_instance> di mana capture_instance adalah nilai yang ditentukan untuk instans pengambilan ketika tabel sumber diaktifkan untuk mengubah pengambilan data.

Konvensi sintaks transact-SQL

Sintaks

cdc.fn_cdc_get_all_changes_<capture_instance> ( from_lsn , to_lsn , '<row_filter_option>' )

<row_filter_option> ::=
    { all
      | all update old
    }

Argumen

from_lsn

Nilai LSN yang mewakili titik akhir rendah rentang LSN untuk disertakan dalam tataan hasil. from_lsn adalah biner(10).

Hanya baris dalam cdc. [capture_instance]_CT ubah tabel dengan nilai dalam __$start_lsn lebih besar dari atau sama dengan from_lsn disertakan dalam tataan hasil.

to_lsn

Nilai LSN yang mewakili titik akhir tinggi rentang LSN untuk disertakan dalam tataan hasil. to_lsn adalah biner(10).

Hanya baris dalam cdc. [capture_instance]_CT mengubah tabel dengan nilai dalam __$start_lsn lebih besar dari atau sama dengan from_lsn dan kurang dari atau sama dengan to_lsn disertakan dalam tataan hasil.

<row_filter_option>

Opsi yang mengatur konten kolom metadata dan baris yang dikembalikan dalam tataan hasil.

Bisa menjadi salah satu opsi berikut:

  • semua

    Mengembalikan semua perubahan dalam rentang LSN yang ditentukan. Untuk perubahan karena operasi pembaruan, opsi ini hanya mengembalikan baris yang berisi nilai baru setelah pembaruan diterapkan.

  • semua memperbarui lama

    Mengembalikan semua perubahan dalam rentang LSN yang ditentukan. Untuk perubahan karena operasi pembaruan, opsi ini mengembalikan baris yang berisi nilai kolom sebelum pembaruan dan baris yang berisi nilai kolom setelah pembaruan.

Tabel dikembalikan

Nama kolom Jenis data Deskripsi
__$start_lsn biner(10) Terapkan LSN yang terkait dengan perubahan yang mempertahankan urutan penerapan perubahan. Perubahan yang dilakukan dalam transaksi yang sama berbagi nilai LSN penerapan yang sama.
__$seqval biner(10) Nilai urutan yang digunakan untuk mengurutkan perubahan pada baris dalam transaksi.
__$operation int Mengidentifikasi operasi bahasa manipulasi data (DML) yang diperlukan untuk menerapkan baris data perubahan ke sumber data target. Bisa menjadi salah satu nilai berikut:

1 = hapus
2 = sisipkan
3 = pembaruan (nilai kolom yang diambil adalah nilai kolom sebelum operasi pembaruan). Nilai ini hanya berlaku ketika opsi filter baris 'semua pembaruan lama' ditentukan.
4 = pembaruan (nilai kolom yang diambil adalah nilai kolom setelah operasi pembaruan)
__$update_mask varbinary(128) Masker bit dengan sedikit yang sesuai dengan setiap kolom yang ditangkap yang diidentifikasi untuk instans pengambilan. Nilai ini memiliki semua bit yang ditentukan yang diatur ke 1 ketika __$operation1 atau 2. Ketika __$operation3 atau 4, hanya bit yang sesuai dengan kolom yang berubah diatur ke 1.
<captured source table columns> Bervariasi Kolom yang tersisa yang dikembalikan oleh fungsi adalah kolom yang diambil yang diidentifikasi saat instans pengambilan dibuat. Jika tidak ada kolom yang ditentukan dalam daftar kolom yang diambil, semua kolom dalam tabel sumber dikembalikan.

Izin

Memerlukan keanggotaan dalam peran server tetap sysadmin atau peran database tetap db_owner . Untuk semua pengguna lain, memerlukan izin SELECT pada semua kolom yang diambil dalam tabel sumber dan, jika peran pembatasan untuk instans pengambilan ditentukan, keanggotaan dalam peran database tersebut. Ketika pemanggil tidak memiliki izin untuk melihat data sumber, fungsi mengembalikan kesalahan 229:

The SELECT permission was denied on the object 'fn_cdc_get_all_changes_...', database '<DatabaseName>', schema 'cdc'.

Keterangan

Kolom tipe data gambar, teks , dan ntext selalu diberi nilai saat atau . Kolom jenis data varbinary(max), varchar(max), atau nvarchar(max) diberi nilai NULL saat __$operation3 kecuali kolom berubah selama pembaruan. Saat __$operation1, kolom ini diberi nilainya pada saat penghapusan. Kolom komputasi yang disertakan dalam instans pengambilan selalu memiliki nilai NULL.

Kesalahan 313 diharapkan jika rentang LSN yang disediakan tidak sesuai saat memanggil cdc.fn_cdc_get_all_changes_<capture_instance> atau cdc.fn_cdc_get_net_changes_<capture_instance>. Jika parameter lsn_value berada di luar waktu LSN terendah atau LSN tertinggi, maka eksekusi fungsi-fungsi ini mengembalikan kesalahan 313:

Msg 313, Level 16, State 3, Line 1
An insufficient number of arguments were supplied for the procedure or function.

Kesalahan ini harus ditangani oleh pengembang.

Contoh

Beberapa templat SQL Server Management Studio tersedia yang menunjukkan cara menggunakan fungsi kueri penangkapan data perubahan. Templat ini tersedia di menu Tampilan di Management Studio. Untuk informasi selengkapnya, lihat Penjelajah Templat.

Contoh ini menunjukkan Enumerate All Changes for Valid Range Template. Ini menggunakan fungsi cdc.fn_cdc_get_all_changes_HR_Department untuk melaporkan semua perubahan yang saat ini tersedia untuk instans tangkapan HR_Department, yang didefinisikan untuk tabel sumber HumanResources.Department dalam database AdventureWorks2025.

-- Enumerate All Changes for Valid Range Template
USE AdventureWorks2022;
GO

DECLARE @from_lsn AS BINARY (10), @to_lsn AS BINARY (10);
SET @from_lsn = sys.fn_cdc_get_min_lsn('HR_Department');
SET @to_lsn = sys.fn_cdc_get_max_lsn();

SELECT *
FROM cdc.fn_cdc_get_all_changes_HR_Department(@from_lsn, @to_lsn, N'all');
GO