2013-03-20 3 views
5

최소 및 최대 날짜를 전달하여 CDC 사용 가능 테이블에서 순 변경을 얻으려고합니다. 그러나 아래에 오류가 던지고있다.변경 데이터 캡처 오류

Msg 313, Level 16, State 3, Line 24 
An insufficient number of arguments were supplied for the procedure or function cdc.fn_cdc_get_net_changes_ ... . 

내 코드는 다음과 같습니다 :

DECLARE @CDate DATE = '2013-03-18' --This is the date after the CDC was enabled on the table 
DECLARE @count INT; 
DECLARE @lsnStartDatetime DATETIME; 
DECLARE @lsnEndDateTime DATETIME; 

DECLARE @begin_time DATETIME , 
@end_time DATETIME , 
@from_lsn BINARY(10) , 
@to_lsn BINARY(10); 


SELECT @lsnStartDatetime = CAST(CAST(@CDate AS NVARCHAR(10)) + ' 00:00:00' AS DATETIME) 
SELECT @lsnEndDateTime = CAST(CAST(@CDate AS NVARCHAR(10)) + ' 23:59:59' AS DATETIME) 


SET @from_lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than or equal', 
             @lsnStartDatetime); 
SET @to_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal', 
            @lsnEndDateTime); 

if exists (select * from sys.objects where name = 'EmployeeCDCbyDate' and type = 'u') 
drop table etl.EmployeeCDCbyDate 
SELECT * 
FROM cdc.fn_cdc_get_net_changes_employee(@from_lsn, @to_lsn, N'all') 

가 from_lsn이되고 코드가 작동 다음은 CDC 테이블 '직원'

맞아야 매핑됩니다와 sys.fn_cdc_map_time_to_lsn 나던 경기에서지고 to_lsn 벌금; 하지만 min max lsn에서 모든 순 변화를 얻습니다.

내가 원하는 것은 주어진 날짜에 대해 최대 및 최소 lsn의 cdc 인스턴스를 가져 와서 해당 날짜에 대한 순 변경을 얻는 것입니다. 모든 단서?

편집 : 나는 테이블의 무리에 사용할 때

이 먼저 테이블 잘 작동합니다.

예는 :

USE ERP 

EXEC sys.sp_cdc_disable_db 
EXEC sys.sp_cdc_enable_db 

EXEC sys.sp_cdc_enable_table @source_schema = N'dbo', 
@source_name = N'Employee', 
@capture_instance = 'Employee', 
@supports_net_changes =1, 
@role_name = NULL 

EXEC sys.sp_cdc_enable_table @source_schema = N'dbo', 
@source_name = N'StoreListing', 
@capture_instance = 'StoreListing', 
@supports_net_changes =1, 
@role_name = NULL 

Go 

이 직원 테이블과 잘 작동합니다. 내가 CDC를 사용할 수있는 순서를 변경하면 (먼저 상점 목록을 저장하고 다음에 직원을 배치하면) 직원 목록과 잘 작동합니다.

답변

1

MSDN의 사회 : Is there bug with cdc.fn_cdc_get_net_changes_.... in SQL Server 2012에서 비슷한 질문에 대한 대답이 있습니다.

평가자가 답변 한 것으로 표시됩니다. 인용구는 다음과 같습니다.

제 서버에서 테스트되었습니다. SQL Server 2008 R2에서 스크립트를 실행하면 오류없이 성공적으로 실행할 수 있습니다.

SQL Server 2012에서 스크립트를 실행하면 오류 메시지가 사용자와 동일하게 나타납니다. 최신 SQL Server 2012 서비스 팩을 적용하여 문제가 없는지 확인할 수 있다고 생각합니다.

And here is a bug report with Microsoft. 조사 중입니다.

+0

그 모든 답변과 연결에 있었다 종료 LSN 번호

을했기 때문에 그 이유는 . 누군가가 이것을하기 위해 다른 방법을 찾은 경우 찾고 있습니다. – Sreedhar

+0

죄송합니다. 코드를 비교해야했습니다. 첫 번째 테이블에서 작동하는 Edit의 코드는 다른 테이블에서도 작동합니까? – Stoleg