5

Min と Max の日付を渡して、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')

sys.fn_cdc_map_time_to_lsn から取得した from_lsn と to_lsn が一致しないのは、cdc テーブル 'employee' に対してマップされていますか?

以下のコードは正常に動作します。ただし、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 が有効になっている順序を変更すると (storelist を最初に配置し、次に従業員を配置した場合)、従業員のリストで正常に機能します。

4

2 に答える 2

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 を適用して、問題がないかどうかを確認してみてください。

また、Microsoft のバグ レポートは次のとおりです。調査中です。

于 2013-05-26T22:19:17.713 に答える
0

このメッセージを受け取りました。その理由は、開始 LSN 番号と終了 LSN 番号を持っていたためです。

もっと詳しく答えましたhttps://stackoverflow.com/a/30920333/98802

于 2015-06-18T16:04:24.587 に答える