所以我不是 100% 确定我理解您的要求,但是如果您需要表中所有成员的最新值,则忽略 CDC 表并只查询表本身,因为这是所有最新值所在的位置毕竟。
如果您需要查看某个时间段内所有已更改的成员的最新值,则应使用 cdc.fn_cdc_get_net_changes_(capture_instance) 函数,详细说明如下:
cdc.fn_cdc_get_net_changes
这允许您指定捕获期间的开始和结束日期(通过允许您将 LSN 映射到实际时间的 sys.fn_cdc_map_time_to_lsn 函数),然后它将在此期间将净更改输出到表中。
cdc.fn_cdc_get_net_changes_(capture_instance) 更改是根据您的表名生成的,因此您没有指定这是什么,我将其称为 dbo_members,请根据需要更改,这里是如何获取列表的示例使用上面详述的函数在最后一天内所有更改的成员的最新值:
DECLARE @begin_time DATETIME ,
@end_time DATETIME ,
@begin_lsn BINARY(10) ,
@end_lsn BINARY(10);
SELECT @begin_time = GETDATE() - 1 ,
@end_time = GETDATE();
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 [MemberID] ,
[LastName]
FROM cdc.fn_cdc_get_net_changes_dbo_members(@begin_lsn, @end_lsn, 'all')
GO