DECLARE
@s DATE = SYSDATETIME(), -- start today at midnight
@e DATE = DATEADD(DAY, 1, SYSDATETIME()), -- end tomorrow at midnight
@sl BINARY(10), -- start LSN
@el BINARY(10); -- end LSN
SELECT
@sl = sys.fn_cdc_map_time_to_lsn('smallest greater than or equal', @s),
@el = sys.fn_cdc_map_time_to_lsn('largest less than', @e);
SELECT @sl, @el; -- start LSN and end LSN within today
您可以使用联机丛书:使用更改数据(MSDN)中所述的内置表值函数 (TVF )。
首先,您需要找到要用于过滤要查询的范围的 LSN。这些 LSN 将代表日志中的点,您可以将这些点与日期时间值相关联。您可以使用sys.fn_cdc_map_time_to_lsn执行此操作。假设您要报告今天捕获的所有变更数据:
然后,您可以在cdc.fn_cdc_get_all_changes和cdc.fn_cdc_get_net_changes函数中使用这些 LSN 值,具体取决于您所追求的(比如说,对于名为 的表
dbo.floob
):