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.
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