sys.fn_cdc_map_time_to_lsn (T-SQL)

Berlaku untuk:SQL Server

Mengembalikan nilai nomor urutan log (LSN) dari start_lsn kolom dalam tabel sistem cdc.lsn_time_mapping untuk waktu yang ditentukan. Anda dapat menggunakan fungsi ini untuk memetakan rentang tanggalwaktu secara sistematis ke dalam rentang berbasis LSN yang diperlukan oleh fungsi enumerasi penangkapan data perubahan cdc.fn_cdc_get_all_changes_<capture_instance> dan cdc.fn_cdc_get_net_changes_<capture_instance> untuk mengembalikan perubahan data dalam rentang tersebut.

Konvensi sintaks transact-SQL

Sintaks

sys.fn_cdc_map_time_to_lsn ( '<relational_operator>', tracking_time )

<relational_operator> ::=
    { largest less than
    | largest less than or equal
    | smallest greater than
    | smallest greater than or equal
    }

Argumen

'<relational_operator>' { terbesar kurang dari | terbesar kurang dari atau sama dengan | terkecil lebih besar dari | terkecil lebih besar dari atau sama dengan }

Digunakan untuk mengidentifikasi nilai LSN yang berbeda dalam cdc.lsn_time_mapping tabel dengan yang terkait tran_end_time yang memenuhi relasi jika dibandingkan dengan nilai tracking_time .

relational_operator adalah nvarchar(30).

tracking_time

Adalah nilai tanggalwaktu yang cocok dengan. tracking_time adalah tanggalwaktu.

Tipe hasil

biner(10)

Keterangan

Untuk memahami bagaimana sys.fn_cdc_map_time_to_lsn fungsi dapat digunakan untuk memetakan rentang tanggalwaktu ke rentang LSN, pertimbangkan skenario berikut.

Asumsikan bahwa konsumen ingin mengekstrak data perubahan setiap hari. Artinya, konsumen hanya ingin perubahan untuk hari tertentu hingga dan termasuk tengah malam. Batas bawah rentang waktu akan terserah tetapi tidak termasuk tengah malam hari sebelumnya. Batas atas akan sampai dan termasuk tengah malam hari tertentu. Contoh berikut menunjukkan bagaimana fungsi sys.fn_cdc_map_time_to_lsn dapat digunakan untuk memetakan rentang berbasis waktu ini secara sistematis ke dalam rentang berbasis LSN yang diperlukan oleh fungsi enumerasi tangkapan data perubahan untuk mengembalikan semua perubahan dalam rentang tersebut.

DECLARE @begin_time DATETIME,
    @end_time DATETIME,
    @begin_lsn BINARY (10),
    @end_lsn BINARY (10);

SET @begin_time = '2007-01-01 12:00:00.000';
SET @end_time = '2007-01-02 12:00:00.000';

SELECT @begin_lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than', @begin_time);

SELECT @end_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal', @end_time);

SELECT *
FROM cdc.fn_cdc_get_net_changes_HR_Department(@begin_lsn, @end_lsn, 'all` `');

Operator smallest greater than relasional digunakan untuk membatasi perubahan pada yang terjadi setelah tengah malam pada hari sebelumnya. Jika beberapa entri dengan nilai LSN yang berbeda berbagi nilai yang tran_end_time diidentifikasi sebagai batas bawah dalam tabel cdc.lsn_time_mapping , fungsi akan mengembalikan LSN terkecil yang memastikan bahwa semua entri disertakan. Untuk batas atas, operator largest less than or equal to relasional digunakan untuk memastikan bahwa rentang mencakup semua entri untuk hari itu termasuk yang memiliki tengah malam sebagai nilainya tran_end_time . Jika beberapa entri dengan nilai LSN yang berbeda berbagi nilai yang tran_end_time diidentifikasi sebagai batas atas, fungsi akan mengembalikan LSN terbesar yang memastikan bahwa semua entri disertakan.

Izin

Memerlukan keanggotaan dalam peran publik .

Contoh

Contoh berikut menggunakan sys.fn_cdc_map_time_to_lsn fungsi untuk menentukan apakah ada baris dalam tabel cdc.lsn_time_mapping dengan tran_end_time nilai yang lebih besar dari atau sama dengan tengah malam. Kueri ini dapat digunakan untuk menentukan, misalnya, apakah proses penangkapan telah memproses perubahan yang dilakukan melalui tengah malam hari sebelumnya, sehingga ekstraksi data perubahan untuk hari itu dapat dilanjutkan.

DECLARE @extraction_time DATETIME,
    @lsn BINARY (10);

SET @extraction_time = '2007-01-01 12:00:00.000';

SELECT @lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than or equal', @extraction_time);

IF @lsn IS NOT NULL
BEGIN
    <some action>
END

Baca juga