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

时间:2013-04-30 12:02:10

标签: sql-server sql-server-2008 cdc

用于查询表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

生成以下错误消息:

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_ ... .

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

SELECT @Begin_LSN, @End_LSN, N'all';

返回

0x00000000000000000000  0x00002594000002130001  all

4 个答案:

答案 0 :(得分:22)

此错误消息有些误导,基本上暗示some parameters might be out of bound。该消息未进一步自定义because of the limitation表函数。

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

有关详细信息,请参阅the following question

答案 1 :(得分:0)

以上答案是正确的,但我想我会补充一下我的情况。我正在保存最后处理的LSN,以备将来运行。但这是一个开发数据库,​​已从prod中恢复。 CDC脚本被重新应用,但是我失去了历史。我需要做的就是删除最后处理的LSN,这样就可以返回到捕获实例的最小LSN,这使我回到了正确的轨道上。不幸的是,这不是一个非常有用的错误消息。

答案 2 :(得分:-1)

在我的情况下,此错误是由于在表级别多次启用/禁用CDC并为同一表创建了两个捕获实例。我通过在数据库级别禁用CDC并再次启用来解决此问题,

答案 3 :(得分:-4)

我遇到了类似的问题。我的问题比你的问题容易,但我想在这里写一些人收到类似错误代码的情况。

当我调用一个有参数的函数时,我忘了输入那些参数。在windowsform数据集中,我必须使用Select * from func_for_something(@id, @name)之类的东西。但是如果我在没有参数的情况下用Select * from func_for_something()写数据集,在visual studio中我没有尝试。但是,当我在程序中的某个地方触发此功能时,我会看到一条像您这样的错误消息。

总之:当您使用具有参数的函数时,不要忘记添加参数。 :) 抱歉我的英语不足