An insufficient number of arguments were supplied for the procedure or function cdc.fn_cdc_get_all_changes_

感情迁移 提交于 2020-03-18 03:40:55

问题


Seemingly valid code for querying the latest tracked changes in the table 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

generates the following error message:

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

However, if I check for actual values they all seem to be valid (not null), the query

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

returns

0x00000000000000000000  0x00002594000002130001  all

回答1:


This error message is somewhat misleading and basically hints that some parameters might be out of bound. The message is not further customized because of the limitation of table functions.

The zero value (0x00000000000000000000) is not a valid one. The sys.fn_cdc_get_min_lsn() returns this value if it cannot find the appropriate capture instance name. This name might deviate from the actual table name. See this question for more details

See the following question for more details.




回答2:


In my case this error was because of multiple time Enable/Disable CDC at table level and created two capture instance for same table. I fixed this by disabling CDC at database level and enabled again, then it works fine.




回答3:


The above answers are correct, but I figured I would add what it was in my case. I was saving the last processed LSN for future runs. But this was a dev database and it was restored from prod. The CDC scripts were re-applied, but I had lost my history. What I needed to do was just remove that last processed LSN so it would go back to getting the minimum LSN for the capture instance and that put me back on the right track. Unfortunately this is not an extremely useful error message.




回答4:


I had a similar problem to yours. My problem is easier than yours but I want to write here for the case of someone receiving an error code like it.

When I called a function which has parameters, I forgot to enter those parameter. In a windowsform dataset I must use something like Select * from func_for_something(@id, @name). But if I write on dataset with Select * from func_for_something() without parameters, in visual studio I had no attemption . However when I triggered this function somewhere in the program I see an error message like yours.

So in conclusion: don't forget to add parameters when you use a function which has parameters. :) Sorry for my insufficent English



来源:https://stackoverflow.com/questions/16299422/an-insufficient-number-of-arguments-were-supplied-for-the-procedure-or-function

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!