sys.fn_cdc_map_time_to_lsn (Transact-SQL)

適用於:SQL Server

傳回指定時間cdc.lsn_time_mapping系統資料表中資料行的 記錄序號 (LSN) 值 start_lsn 。 您可以使用此函式,有系統地將日期時間範圍對應至異動資料擷取列舉函 式cdc.fn_cdc_get_all_changes_ < capture_instance > 和 cdc.fn_cdc_get_net_changes_ < 所需的 LSN 型範圍capture_instance, > 以傳回該範圍內的資料變更。

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 > ' { less | largest less than or equal | smallest greater than | smallest greater than or equal }

用來識別 資料表中 cdc.lsn_time_mapping 相異的 LSN 值,且 tran_end_time 與tracking_time 值相比 ,符合關聯性。

relational_operator Nvarchar(30)

tracking_time

這是要比對的日期時間值。 tracking_time datetime

傳回類型

binary(10)

備註

若要瞭解函式如何 sys.fn_cdc_map_time_to_lsn 用來將日期時間 範圍對應 至 LSN 範圍,請考慮下列案例。

假設取用者想要每天擷取變更資料。 也就是說,消費者只想要在指定的一天變更,包括午夜。 時間範圍的下限將高達,但不包括前一天的午夜。 上限將高達和包括指定日期的午夜。 下列範例示範如何使用 函 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 可用來限制前一天午夜之後發生的變更。 如果具有不同 LSN 值的多個專案共用 tran_end_time cdc.lsn_time_mapping資料表中 識別為下限的值,則函式會傳回最小的 LSN,以確保包含所有專案。 對於上限,關係運算子 largest less than or equal to 是用來確保範圍包含當天的所有專案,包括午夜作為其 tran_end_time 值的專案。 如果具有不同 LSN 值的多個專案會共用 tran_end_time 識別為上限的值,則函式會傳回最大的 LSN,以確保包含所有專案。

權限

需要 public 角色的成員資格。

範例

下列範例會 sys.fn_cdc_map_time_to_lsn 使用 函式來判斷cdc.lsn_time_mapping 資料表中 是否有任何資料列的值 tran_end_time 大於或等於午夜。 例如,此查詢可用來判斷擷取程式是否已處理前一天午夜所認可的變更,以便擷取當天的變更資料可以繼續進行。

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

另請參閱