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,> 以傳回該範圍內的數據變更。
語法
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