9

MS SQL 2008 データベースで変更データ キャプチャ (CDC) を有効にしており、次のコードを使用して新しいテーブルをデータ キャプチャに追加します。

EXEC sys.sp_cdc_enable_table
@source_schema ='ordering',
@source_name ='Fields',
@role_name = NULL,
@supports_net_changes = 0;

ただし、sys.fn_cdc_get_min_lsn(@TableName)関数を使用して追跡テーブルから変更を選択しようとするたびに

 SET @Begin_LSN = sys.fn_cdc_get_min_lsn('Fields')

私は常にゼロ値を取得します。

次のスペルを使用してスキーマ名を追加してみました。

 SET @Begin_LSN = sys.fn_cdc_get_min_lsn('ordering.Fields')

しかし、これは役に立ちませんでした。

4

3 に答える 3

20

sys.fn_cdc_get_min_lsn()私の間違いは、テーブル名を受け入れると仮定することでした。私は MSDN ドキュメントの例にほとんど見当違いでした。おそらく、パラメーターの正確な意味を確認していませんでした。

がテーブル名ではなくキャプチャ インスタンス名sys.fn_cdc_get_min_lsn()を受け入れることがわかりました。

現在のキャプチャ インスタンスをざっと見てみましょう。

SELECT capture_instance FROM cdc.change_tables

正しいパラメーター名を返します。

ordering_Fields

そのため、SQL Server で一般的なドット表記ではなく、アンダースコアをスキーマ セパレーターとして使用する必要があります。

于 2013-04-30T10:56:10.063 に答える
2

上記の答えは正しいです。または、追加のパラメーターcapture_instanceを cdc enable に追加することもできます

EXEC sys.sp_cdc_enable_table
@source_schema ='ordering',
@source_name ='Fields',
@capture_instance = 'dbo_Fields'
@role_name = NULL,
@supports_net_changes = 0;

次に、min_lsn 関数で capture_instance 文字列を使用します

SET @Begin_LSN = sys.fn_cdc_get_min_lsn('dbo_Fields')

0x00000000000000000000 ではなく、最初の LSN を返します。

これは、呼び出し時に SQL から「プロシージャまたは関数 cdc に指定された引数の数が不十分です...」というエラーを解決しようとするときに特に役立ち ます。

cdc_get_net_changes_Fields(@Begin_LSN, sys.fn_cdc_get_max_lsn(), 'all')

これは単に「LSN が期待範囲外」であることを意味します

于 2014-01-22T04:03:50.910 に答える