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

StackOverflow https://stackoverflow.com/questions/16299422

  •  13-04-2022
  •  | 
  •  

Question

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
Was it helpful?

Solution

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.

OTHER TIPS

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.

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.

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top