2013-03-20 21 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テーブル '従業員'

aginstマッピングされているとsys.fn_cdc_map_time_to_lsn doesntのマッチから取得to_lsn罰金; min max lsnからすべての正味の変更を取得します。私は必要なもの

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 

は、指定した日付のためにCDCインスタンスの最小値と最大LSNを取得し、その日付の純変化を取得することです。すべての手がかりは?

編集:私はテーブルの束に有効にしたとき

これは最初のテーブルと正常に動作します。

例:

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 

これは、Employeeテーブルと正常に動作します。 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 Service Packを適用して問題がないかどうか確認することができます。

And here is a bug report with Microsoft.調査中です。

+0

これらすべてに答えて接続にあったエンディングLSN番号

を持っていたためであります。もし誰かがこれをやり遂げるための別の方法を見つけたら、探している。 – Sreedhar

+0

申し訳ありません。私はコードを比較すべきだった。最初のテーブルで動作するEditのコードは他のテーブルでも使えますか? – Stoleg

関連する問題