Folowing fn_cdc_map_time_to_lsn
函数,按日期时间过滤更改历史记录。
来自msdn的SQL示例,但是我的表:
DECLARE @begin_time DATETIME, @end_time DATETIME, @begin_lsn BINARY(10), @end_lsn BINARY(10);
SET @begin_time = GETDATE()-1
SET @end_time = GETDATE()+1;
SET @begin_lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than', @begin_time);
SET @end_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal', @end_time);
SELECT *
FROM cdc.fn_cdc_get_all_changes_dbo_EXT_GeolObject(sys.fn_cdc_map_time_to_lsn('smallest greater than', @begin_time), sys.fn_cdc_map_time_to_lsn('largest less than or equal', @end_time),'all')
我打印所有变量并查看结果:
Aug 9 2017 11:41AM
Aug 11 2017 11:41AM
@begin_lsn = 0x0000002B000000CE007B
@end_lsn = 0x000000E000002CA00001
但在这种情况下,我得到了以下错误:
为程序提供的参数数量不足或 function cdc.fn_cdc_get_all_changes_ ...。
如果不使用fn_cdc_map_time_to_lsn
函数,Sql可以正常工作。例如:
SELECT * FROM cdc.fn_cdc_get_all_changes_dbo_EXT_GeolObject(sys.fn_cdc_get_min_lsn('dbo_EXT_GeolObject'), sys.fn_cdc_get_max_lsn(), 'all')
在这种情况下@begin_lsn = 0x000000440000001000AC
和@end_lsn = 0x000000E000002D960001
我不明白哪里有虫... 我做错了什么?