CDC错误“为过程或函数cdc.fn_cdc_get_net_changes_ ...提供的参数数量不足”

时间:2016-09-14 07:37:14

标签: sql sql-server cdc

我正在使用MS SQL 2014.有些表已启用了CDC。 有一个问题:当我使用函数fn_cdc_get_net_changes_ ..和参数'all'时 - 查询工作没有任何问题。 但是如果我使用参数'all update old'(在更改之前和之后获取数据),我会收到错误:

  

为程序或函数cdc.fn_cdc_get_net_changes_ ...提供的参数数量不足。

我读过很多来源,发现当LSN无效时会出现这样的错误。 但就我而言,情况并非如此!

select sys.fn_cdc_get_min_lsn('dbo_Lager03'), sys.fn_cdc_get_max_lsn()
-- 0x0016961C0002E34F0008   0x0016961C0002F8B90001

-- All OK
select * from cdc.[fn_cdc_get_net_changes_dbo_Lager03](sys.fn_cdc_get_min_lsn('dbo_Lager03'), sys.fn_cdc_get_max_lsn(), 'all')
-- table with rows

-- An insufficient number of arguments were supplied for the procedure or function cdc.fn_cdc_get_net_changes_ ... .
select * from cdc.[fn_cdc_get_net_changes_dbo_Lager03](sys.fn_cdc_get_min_lsn('dbo_Lager03'), sys.fn_cdc_get_max_lsn(), 'all update old')
-- empty table and error message in 'Messages' window

如何使该功能使用参数'all update all'? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

感谢 Damien_The_Unbeliever

对于参数'all update old',正确的是cdc。[fn_cdc_get_ all _changes_dbo_Lager03],而不是cdc。[fn_cdc_get_ net _changes_dbo_Lager03]:

select sys.fn_cdc_get_min_lsn('dbo_Lager03'), sys.fn_cdc_get_max_lsn()
-- 0x0016961C0002E34F0008   0x0016961C0002F8B90001

-- All OK
select * from cdc.[fn_cdc_get_net_changes_dbo_Lager03](sys.fn_cdc_get_min_lsn('dbo_Lager03'), sys.fn_cdc_get_max_lsn(), 'all')
-- table with rows

function cdc.fn_cdc_get_net_changes_ ... .
select * from cdc.[fn_cdc_get_all_changes_dbo_Lager03](sys.fn_cdc_get_min_lsn('dbo_Lager03'), sys.fn_cdc_get_max_lsn(), 'all update old')