sys.fn_cdc_map_time_to_lsn (Transact-SQL)

Dotyczy:SQL Server

Zwraca wartość numeru sekwencyjnego logu (LSN) z kolumny start_lsn w tabeli systemu cdc.lsn_time_mapping na określony czas. Możesz użyć tej funkcji do systematycznego mapowania zakresów dat-czas na zakres oparty na LSN, który funkcje enumeracyjne do przechwytywania zmian cdc.fn_cdc_get_all_changes_<capture_instance> i cdc.fn_cdc_get_net_changes_ capture_instance<> zwracają zmiany danych w tym zakresie.

Transact-SQL konwencje składni

Syntax

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
    }

Arguments

'<relational_operator>' { największy mniejszy niż | największy mniejszy lub równy | najmniejszy większy niż | najmniejszy większy niż lub równy }

Używany do identyfikacji odrębnej wartości LSN w tabeli cdc.lsn_time_mapping z powiązanym tran_end_time elementem spełniającym tę relację w porównaniu z wartością tracking_time .

relational_operator to nvarchar(30).

tracking_time

Czy wartość daty, z którą warto dopasować? tracking_timejest czas na randkę.

Typ zwracany

binary(10)

Remarks

Aby zrozumieć, jak sys.fn_cdc_map_time_to_lsn funkcję można wykorzystać do odwzorowania zakresów dat-czas na zakresy LSN, rozważmy następujący scenariusz.

Załóżmy, że konsument chce codziennie wyciągać dane o zmianach. Oznacza to, że konsument chce zmian tylko na dany dzień, aż do północy włącznie. Dolna granica tego zakresu czasu obejmowałaby do, ale nie wliczając północy poprzedniego dnia. Górna granica obejmuje do północy danego dnia włącznie. Poniższy przykład pokazuje, jak funkcję sys.fn_cdc_map_time_to_lsn można użyć do systematycznego odwzorowania tego zakresu opartego na czasie na zakres oparty na LSN, który funkcje enumeracyjne przechwytują zmiany, aby zwracać wszystkie zmiany w tym zakresie.

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 relacyjny służy do ograniczenia zmian do tych, które zaszły po północy poprzedniego dnia. Jeśli wiele wpisów o różnych wartościach LSN dzieli tran_end_time wartość zidentyfikowaną jako dolna granica w tabeli cdc.lsn_time_mapping , funkcja zwróci najmniejszy LSN, zapewniając, że wszystkie wpisy zostaną uwzględnione. Dla górnego ograniczenia operator relacyjny largest less than or equal to jest używany do zapewnienia, że zakres obejmuje wszystkie wpisy dla dnia, w tym te, których wartość jest tran_end_time północ. Jeśli wiele wpisów o różnych wartościach LSN dzieli tran_end_time wartość zidentyfikowaną jako górna granica, funkcja zwróci największy LSN, zapewniając, że wszystkie wpisy zostaną uwzględnione.

Permissions

Wymaga członkostwa w publicznej roli .

Examples

Poniższy przykład wykorzystuje sys.fn_cdc_map_time_to_lsn tę funkcję do określenia, czy w tabeli cdc.lsn_time_mapping są wiersze o tran_end_time wartości większej lub równej północy. To zapytanie może być użyte do ustalenia na przykład, czy proces przechwytywania już przetworzył zmiany zatwierdzone do północy poprzedniego dnia, aby ekstrakcja danych zmian z danego dnia mogła być kontynuowana.

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