用于查询表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
答案 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中我没有尝试。但是,当我在程序中的某个地方触发此功能时,我会看到一条像您这样的错误消息。
总之:当您使用具有参数的函数时,不要忘记添加参数。 :) 抱歉我的英语不足