按日期时间进行CDC过滤会收到错误。为程序或功能提供的参数数量不足

时间:2017-08-10 09:13:11

标签: sql-server sql-server-2012 cdc

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

我不明白哪里有虫... 我做错了什么?

0 个答案:

没有答案