sys.fn_cdc_map_time_to_lsn (Transact-SQL)

適用対象:SQL Server

指定した時刻のcdc.lsn_time_mapping システム テーブルのstart_lsn列からログ シーケンス番号 (LSN) の値を返します。 この関数を使用すると、datetime 範囲を、変更データ キャプチャ列挙関数cdc.fn_cdc_get_all_changes_capture_instanceおよびcdc.fn_cdc_get_net_changes_<capture_instance>で必要な LSN ベースの範囲に体系的にマップして、その範囲内の>データ変更を返すことができます。<

Transact-SQL 構文表記規則

構文

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
    }

引数

'<relational_operator>' { 最も大きい値より小さい | 最も小さいか等しい | 最小以上 | 最小以上 }

テーブル内cdc.lsn_time_mappingで、tracking_time値と比較した場合にリレーションシップを満たす が関連付けられているtran_end_time個別の LSN 値を識別するために使用されます。

relational_operatornvarchar(30)です

tracking_time

照合する datetime 値です。 tracking_timedatetime です

の戻り値の型 :

binary(10)

注釈

関数を使用して datetime 範囲を sys.fn_cdc_map_time_to_lsn LSN 範囲にマップする方法を理解するには、次のシナリオを検討してください。

変更データを毎日抽出するとします。 つまり、特定の日の午前 0 時までに発生した変更を取得する必要があります。 時間範囲の下限は、前日の午前 0 時までですが、含まれません。 上限は、指定された日の午前 0 時までであり、含まれます。 次の例は、 関数 sys.fn_cdc_map_time_to_lsn を使用して、この時間ベースの範囲を、その範囲内のすべての変更を返すために変更データ キャプチャ列挙関数で必要な LSN ベースの範囲に体系的にマップする方法を示しています。

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

関係演算子 smallest greater than は、前日の午前 0 時以降に発生した変更を制限するために使用されます。 LSN 値が異なる複数のエントリが、cdc.lsn_time_mapping テーブルの下限として識別される値を共有tran_end_timeする場合、関数は最小の LSN を返し、すべてのエントリが含まれていることを確認します。 上限の場合、関係演算子 largest less than or equal to を使用して、値として tran_end_time 午前 0 時を持つエントリを含む、その日のすべてのエントリが範囲に含まれるようにします。 異なる LSN 値を持つ複数のエントリが上限として識別された値を tran_end_time 共有する場合、関数は最大の LSN を返し、すべてのエントリが含まれていることを確認します。

アクセス許可

ロール public のメンバーシップが必要です。

次の例では、 関数を sys.fn_cdc_map_time_to_lsn 使用して、 cdc.lsn_time_mapping テーブルに、午前 0 時以上の値を tran_end_time 持つ行があるかどうかを判断します。 このクエリを使用すると、キャプチャ プロセスが前日の午前 0 時までコミットされた変更を既に処理しているかどうかを判断して、その日の変更データの抽出を続行できます。

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

こちらもご覧ください