2013-03-20 42 views
5

Đang cố gắng nhận các thay đổi ròng trên bảng đã bật CDC bằng cách chuyển các ngày Tối thiểu và Tối đa. Nhưng là ném dưới đây lỗi.Thay đổi lỗi chụp dữ liệu

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

Mã của tôi là như sau:

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') 

Đó có phải là from_lsn và to_lsn nhận được từ trận đấu doesnt sys.fn_cdc_map_time_to_lsn với được ánh xạ aginst bảng CDC 'nhân viên'

Dưới tác phẩm đang khỏe; nhưng nó nhận được tất cả các thay đổi ròng từ min max lsn's.

DECLARE @min_lsn BINARY(10) = sys.fn_cdc_get_min_lsn ('employee') 
DECLARE @max_lsn BINARY(10) = sys.fn_cdc_get_max_lsn() 
SELECT * FROM cdc.fn_cdc_get_net_changes_employee(@min_lsn, @max_lsn, 'all') ORDER BY 1 desc 

Điều tôi cần là nhận min và tối đa lsn phiên bản cdc cho ngày cụ thể và nhận các thay đổi ròng cho ngày đó. Bất kì manh mối nào?

Edit:

này hoạt động tốt với bảng đầu tiên khi tôi cho phép trên loạt các bảng.

Ex:

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 

này hoạt động tốt với bảng Employee. Nếu tôi thay đổi thứ tự mà trong đó chúng được bật CDC (nếu tôi đặt bộ lưu trữ đầu tiên và nhân viên tiếp theo), thì nó hoạt động tốt với danh sách nhân viên.

Trả lời

1

Có câu trả lời cho câu hỏi tương tự trên MSDN Social: Is there bug with cdc.fn_cdc_get_net_changes_.... in SQL Server 2012.

Nó được đánh dấu là trả lời bởi người kiểm duyệt. Dưới đây là trích dẫn:

Tôi đã thử nghiệm trong máy chủ của mình. Khi tôi chạy tập lệnh trong SQL Server 2008 R2, nó có thể chạy thành công mà không có lỗi.

Khi tôi chạy tập lệnh trong SQL Server 2012, thông báo lỗi xuất hiện giống như của bạn. Tôi nghĩ bạn có thể thử áp dụng Gói dịch vụ SQL Server 2012 mới nhất để xem liệu nó có ổn không.

And here is a bug report with Microsoft. Nó đang được điều tra.

+0

Những bài trên MSDN diễn đàn và trên Connect là bài viết của tôi mặc dù :-) . Đang tìm kiếm nếu có ai tìm ra cách thay thế để làm điều này. – Sreedhar

+0

Xin lỗi vì điều đó. Tôi nên so sánh mã. Mã đó trong Chỉnh sửa, hoạt động cho bảng đầu tiên - nó có hoạt động với các bảng khác không? – Stoleg

0

tôi đã nhận được thông điệp này và lý do là bởi vì tôi đã bắt đầu LSN của tôi và kết thúc số LSN

tôi đã trả lời một cách chi tiết hơn https://stackoverflow.com/a/30920333/98802

Các vấn đề liên quan