2016-10-07 11 views
0
私は良いSQLの市民であることをしようとしている

ない直接CDCテーブルを使用し、TVFsを使用するには、それがために惨めに失敗しました私に。(SQL 2012のEnterprise SP3)、パターン次..チェンジ・データ・キャプチャ:無効なオブジェクト名「sys.fn_cdc_get_max_lsn」と「sys.fn_cdc_get_min_lsn」

DECLARE @from_lsn binary(10), @to_lsn binary(10) 
SET @from_lsn = 
    sys.fn_cdc_get_min_lsn('mytable') 
SET @to_lsn = sys.fn_cdc_get_max_lsn() 
SELECT * FROM cdc.fn_cdc_get_all_changes_mytable 
    (@from_lsn, @to_lsn, N'mytable'); 
GO 

私はエラー

無効なオブジェクト名 'cdc.fn_cdc_get_all_changes_mytable' を得ました。

私はその後、私は機能上のテーブル名のスキーマインフロントを置くために必要な発見が、その後、この得た:

引数の不足数はプロシージャまたは 機能のCDCのために提供されました。 fn_cdc_get_all_changes_ ...。

他の投稿がこの問題に遭遇したが、これらの機能が存在しないことを発見したので、lsn値をデバッグしようとしました。

enter image description here

あなたは私がマスターDBにこれらの機能を自分で見つけることができます見ることができるように。誰でも私が間違ったことを知っていますか?

私はこれを見ましたMicrosoft connect article誰かが同じ問題を経験した場所で、その解決策は許されません。

答えて

1

これらの関数はテーブルを返しません。スカラーです。したがって、変数を使用してください。あなたはN'all'ように、最終的なTVFで三番目のパラメータを置き換え、TechNetの記事からコードをも変更しました

DECLARE @from_lsn binary(10) 
SET @from_lsn = sys.fn_cdc_get_min_lsn(N'schema_table') 
SELECT @from_lsn 

DECLARE @from_lsn binary(10), @to_lsn binary(10) 
SET @from_lsn = sys.fn_cdc_get_min_lsn(N'schema_table') 
SET @to_lsn = sys.fn_cdc_get_max_lsn() 
SELECT @from_lsn,@to_lsn 
SELECT * FROM cdc.fn_cdc_get_all_changes_schema_table(@from_lsn, @to_lsn, N'all'); 
GO 

フィルタオプションは、あなたのキャプチャインスタンス名やテーブル名ではありません。 彼らは次のとおりです。

cdc.fn_cdc_get_all_changes_capture_instance (from_lsn , to_lsn , '<row_filter_option>') 

<row_filter_option> ::= 
{ all 
| all update old 
} 

cdc.fn_cdc_get_all_changes_capture_instance

を参照してください。注:テーブルのためのCDCを有効にするときに特定のcapture_instance名を使用している場合は、使用している言葉capture_instanceは、パラメータとして、MSDNのドキュメントに表示されている箇所。 capture_instanceという名前を使用していない場合は、schema_tableとなる可能性があります。 dbo_mytable

関連する問題