sys.fn_cdc_map_time_to_lsn (Transact-SQL)
适用于:SQL Server
返回指定时间cdc.lsn_time_mapping系统表中列start_lsn
的日志序列号 (LSN) 值。 可以使用此函数将日期时间范围系统地映射到更改数据捕获枚举函数所需的基于 LSN 的范围cdc.fn_cdc_get_all_changes_<capture_instance和>cdc.fn_cdc_get_net_changes_<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>” { 最大小于 | 最大小于或等于 | 最小大于 | 最小大于或等于 }
用于在表中标识一个不同的 LSN 值 cdc.lsn_time_mapping
,与 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,确保包含所有条目。
权限
要求 公共 角色具有成员身份。
示例
以下示例使用 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
另请参阅
反馈
提交和查看相关反馈