为过程或函数提供的参数数量不足cdc.fn_cdc_get_all_changes_

Ale*_*kin 11 sql-server cdc sql-server-2008

用于查询表中最新跟踪更改的看似有效的代码Fields:

DECLARE @Begin_LSN BINARY(10), @End_LSN BINARY(10)
SET @Begin_LSN = sys.fn_cdc_get_min_lsn('Fields')
SET @End_LSN = sys.fn_cdc_get_max_lsn()
SELECT * FROM cdc.fn_cdc_get_all_changes_ordering_Fields (@Begin_LSN, @End_LSN, N'all')
GO
Run Code Online (Sandbox Code Playgroud)

生成以下错误消息:

Msg 313, Level 16, State 3, Line 5
An insufficient number of arguments were supplied for the procedure or function cdc.fn_cdc_get_all_changes_ ... .
Run Code Online (Sandbox Code Playgroud)

但是,如果我检查实际值,它们似乎都是有效的(非空),查询

SELECT @Begin_LSN, @End_LSN, N'all';
Run Code Online (Sandbox Code Playgroud)

回报

0x00000000000000000000  0x00002594000002130001  all
Run Code Online (Sandbox Code Playgroud)

Ale*_*kin 24

此错误消息有点误导,并且基本上暗示某些参数可能超出范围.由于表函数的限制,不会进一步自定义该消息.

零值(0x00000000000000000000)不是有效值.在sys.fn_cdc_get_min_lsn()返回此值,如果无法找到合适的捕获实例的名称.此名称可能与实际的表名不同.有关详细信息,请参阅此问题

有关详细信息,请参阅以下问题.

  • 当更改表中没有提供的@Begin_Lsn值时,也会发生这种情况 (2认同)
  • 在我的情况下,lsns 是有效的。仍然得到这个错误 (2认同)