20

用于查询表中最新跟踪更改的看似有效的代码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

4 回答 4

37

此错误消息有些误导,基本上暗示某些参数可能超出范围。由于表功能的限制,消息没有进一步定制。

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

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

于 2013-04-30T12:02:10.243 回答
1

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

于 2018-11-21T06:50:09.570 回答
1

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

于 2019-11-26T14:28:42.413 回答
-4

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

当我调用一个有参数的函数时,我忘了输入这些参数。在 windowsform 数据集中,我必须使用类似Select * from func_for_something(@id, @name). 但是如果我在Select * from func_for_something()没有参数的数据集上写,在 Visual Studio 中我没有尝试。但是,当我在程序的某处触发此功能时,我会看到一条像您这样的错误消息。

所以总而言之:当你使用一个有参数的函数时,不要忘记添加参数。:) 对不起我的英语不够

于 2014-10-13T08:41:15.550 回答