sys.fn_cdc_map_time_to_lsn (Transact-SQL)

Gilt für:SQL Server

Gibt den Wert der Protokollsequenznummer (Log Sequence Number, LSN) aus der start_lsn Spalte in der cdc.lsn_time_mapping Systemtabelle für die angegebene Zeit zurück. Sie können diese Funktion verwenden, um datetime-Bereiche systematisch dem LSN-basierten Bereich zuzuordnen, der von den Änderungsdatenerfassungsaufzählungsfunktionen cdc.fn_cdc_get_all_changes_<capture_instance> und cdc.fn_cdc_get_net_changes_<capture_instance benötigt wird,> um Datenänderungen innerhalb dieses Bereichs zurückzugeben.

Transact-SQL-Syntaxkonventionen

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
    }

Argumente

'<relational_operator>' { größte kleiner als | größte kleiner als oder gleich | kleinster größer als | kleinster größer als oder gleich }

Wird verwendet, um einen eindeutigen LSN-Wert in der cdc.lsn_time_mapping Tabelle mit einem zugeordneten tran_end_time zu identifizieren, der die Beziehung im Vergleich zum tracking_time-Wert erfüllt.

relational_operator ist nvarchar(30)

tracking_time

Der datetime-Wert, mit dem verglichen werden soll. tracking_time ist datetime

Rückgabetyp

binary(10)

Bemerkungen

Betrachten Sie das folgende Szenario, um zu verstehen, wie die sys.fn_cdc_map_time_to_lsn Funktion zum Zuordnen von Datetime-Bereichen zu LSN-Bereichen verwendet werden kann.

Angenommen, ein Consumer möchte täglich Änderungsdaten extrahieren. In diesem Fall interessiert sich der Consumer nur für die Änderungen an einem bestimmten Tag bis einschließlich Mitternacht. Die Untergrenze des Zeitbereichs wäre bis Mitternacht des vorangehenden Tags (nicht einschließlich Mitternacht). Die Obergrenze wäre bis einschließlich Mitternacht des bestimmten Tags. Das folgende Beispiel zeigt, wie die Funktion sys.fn_cdc_map_time_to_lsn verwendet werden kann, um diesen zeitbasierten Bereich systematisch dem LSN-basierten Bereich zuzuordnen, der von den Change Data Capture Enumerationsfunktionen benötigt wird, um alle Änderungen innerhalb dieses Bereichs zurückzugeben.

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` `');

Der relationale Operator smallest greater than wird verwendet, um Änderungen auf diejenigen zu beschränken, die nach Mitternacht am vorherigen Tag aufgetreten sind. Wenn mehrere Einträge mit unterschiedlichen LSN-Werten den tran_end_time in der cdc.lsn_time_mapping Tabelle als Untergrenze identifizierten Wert gemeinsam verwenden, gibt die Funktion den kleinsten LSN zurück, um sicherzustellen, dass alle Einträge enthalten sind. Für die Obergrenze wird der relationale Operator largest less than or equal to verwendet, um sicherzustellen, dass der Bereich alle Einträge für den Tag enthält, einschließlich der Einträge mit Mitternacht als tran_end_time Wert. Wenn mehrere Einträge mit unterschiedlichen LSN-Werten den tran_end_time als Obergrenze identifizierten Wert gemeinsam verwenden, gibt die Funktion den größten LSN zurück, um sicherzustellen, dass alle Einträge enthalten sind.

Berechtigungen

Erfordert die Mitgliedschaft in der public -Rolle.

Beispiele

Im folgenden Beispiel wird die sys.fn_cdc_map_time_to_lsn -Funktion verwendet, um zu bestimmen, ob es Zeilen in der cdc.lsn_time_mapping Tabelle mit einem tran_end_time Wert gibt, der größer oder gleich Mitternacht ist. Mit dieser Abfrage kann beispielsweise bestimmt werden, ob der Aufzeichnungsprozess bereits die Änderungen verarbeitet hat, für die bis Mitternacht des vorangehenden Tags ein Commit ausgeführt wurde, sodass mit dem Extrahieren von Änderungsdaten für diesen Tag fortgefahren werden kann.

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

Weitere Informationen