次の方法で共有


sys.fn_all_changes_<capture_instance> (Transact-SQL)

適用対象: SQL サーバー

すべての変更クエリ関数のラッパー。 これらの関数を作成するために必要なスクリプトは、 sys.sp_cdc_generate_wrapper_function ストアド プロシージャによって生成されます。 sys.fn_all_changes_<capture_instance>の作成に使用するストアド プロシージャの詳細については、「sys.sp_cdc_generate_wrapper_function (Transact-SQL)」を参照してください。

Transact-SQL 構文表記規則

構文

fn_all_changes_<capture_instance> ('start_time' ,'end_time', '<row_filter_option>' )  
  
<capture_instance> ::= The name of the capture instance.  
<row_filter_option> ::=  
{ all  
  | all update old  
}  

引数

start_time

結果セットに含める変更テーブル エントリの範囲の下位エンドポイントを表す datetime 値。

結果セットには、 cdc.<capture_instance>_CT 変更テーブル内の、 start_time より長いコミット時間が関連付けられている行のみが含まれます。

この引数に NULL 値を指定した場合、クエリ範囲の下限は、キャプチャ インスタンスの有効な範囲の下限に対応します。

@start_time または @end_time パラメーターの値が最小 LSN または最大 LSN の時間を超えている場合、生成されたラッパー関数を実行するとエラー 313 (Msg 313, Level 16, State 3, Line 1 An insufficient number of arguments were supplied for the procedure or function) が返されます。 このエラーは、開発者が処理する必要があります。

end_time

結果セットに含める変更テーブル エントリの範囲の上位エンドポイントを表す datetime 値。

このパラメーターは、ラッパー関数の作成スクリプトを生成するためにsys.sp_cdc_generate_wrapper_functionが呼び出されたときに@closed_high_end_pointに選択された値に応じて、次の 2 つの可能な意味のいずれかを受け取ることができます。

  • @closed_high_end_point = 1

    結果セットには、end_time以下のコミット時間が関連付けられている cdc.<capture_instance>_CT 変更テーブル内の行のみが含まれます。

  • @closed_high_end_point = 0

    結果セットには、 cdc.capture_instance_CT 変更テーブル内のコミット時間が厳密にend_time未満の行のみが含まれます。

この引数に NULL の値が指定されている場合、クエリ範囲の上位エンドポイントは、キャプチャ インスタンスの有効範囲の上位エンドポイントに対応します。

@start_time または @end_time パラメーターの値が最小 LSN または最大 LSN の時間を超えている場合、生成されたラッパー関数を実行するとエラー 313 (Msg 313, Level 16, State 3, Line 1 An insufficient number of arguments were supplied for the procedure or function) が返されます。 このエラーは、開発者が処理する必要があります。

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

メタデータ列の内容と、結果セットで返される行を制御するオプション。

次のいずれかのオプションを指定できます。

すべて
指定した LSN 範囲内のすべての変更を返します。 更新操作が原因で発生した変更の場合、このオプションは、更新が適用された後に新しい値を含む行のみを返します。

すべての更新プログラムが古い
指定した LSN 範囲内のすべての変更を返します。 更新操作が原因で発生した変更の場合、このオプションは更新前と更新後の列値を含む 2 つの行を返します。

返されるテーブル

列名 列の種類 説明
__CDC_STARTLSN binary(10) 変更に関連付けられているトランザクションのコミット LSN。 同じトランザクションでコミットされたすべての変更は、同じコミット LSN を共有します。
__CDC_SEQVAL binary(10) 特定のトランザクションに含まれる行の変更を並べ替えるためのシーケンス値です。
<の列 @column_list> 状況に応じて異なる ラッパー関数を作成するスクリプトを生成するために呼び出されたときにsp_cdc_generate_wrapper_functionするcolumn_list引数で識別される列。
__CDC_OPERATION nvarchar(2) ターゲット環境に行を適用するために必要な操作を示す操作コード。 これは、呼び出しで指定 row_filter_option 引数の値によって異なります。

row_filter_option = 'all'

'D' - 削除操作

'I' - 挿入操作

'UN' - 更新操作の新しい値

row_filter_option = 'all update old'

'D' - 削除操作

'I' - 挿入操作

'UN' - 更新操作の新しい値

'UO' - 更新操作の古い値
<の列 @update_flag_list> bit ビット フラグには、列名に_uflagを追加することで名前が付けられます。 __CDC_OPERATIONが 'D'、'I'、'UO' の場合、フラグは常に NULL に設定されます。 __CDC_OPERATIONが 'UN' の場合、更新によって対応する列への変更が生成された場合、1 に設定されます。 それ以外の場合は、0 に設定されます。

解説

fn_all_changes_<capture_instance>関数は、cdc.fn_cdc_get_all_changes_<capture_instance> クエリ関数のラッパーとして機能します。 sys.sp_cdc_generate_wrapper ストアド プロシージャは、ラッパーを作成するスクリプトを生成するために使用されます。

ラッパー関数が自動的に作成されることはありません。 ラッパー関数を作成するには、次の 2 つを行う必要があります。

  1. ラッパーの作成スクリプトを生成するストアド プロシージャを実行します。

  2. スクリプトを実行して、ラッパー関数を実際に作成します。

ラッパー関数を使用すると、LSN 値ではなく、 datetime 値で囲まれた間隔内で発生した変更を体系的に照会できます。 ラッパー関数は、指定された datetime 値と、クエリ関数の引数として内部的に必要な LSN 値との間で必要なすべての変換を実行します。 ラッパー関数を使用して変更データのストリームを処理する場合、1 つの呼び出しに関連付けられた間隔の @end_time 値が、後続の呼び出しに関連付けられた間隔の @start_time 値として指定されるという規則に従っている限り、データが失われたり繰り返されたりしないようにします。

スクリプトの作成時に @closed_high_end_point パラメーターを使用すると、指定したクエリ ウィンドウで閉じた上限または開いている上限をサポートするラッパーを生成できます。 つまり、抽出間隔の上限と等しいコミット時間を持つエントリを間隔に含めるかどうかを決定できます。 既定では、上限が含まれます。

すべての変更によって返される結果セットラッパー関数は、変更テーブルの __$start_lsn 列と __$seqval 列をそれぞれ__CDC_STARTLSN列および__CDC_SEQVALとして返します。 これは、ラッパーの生成時に @column_list パラメーターに表示された追跡された列でのみ続きます。 @column_listが NULL の場合は、追跡対象のすべてのソース列が返されます。 ソース列に続いて、操作列 __CDC_OPERATION が返されます。これは、操作を表す 1 文字か 2 文字の列です。

次に、@update_flag_list パラメーターで指定された各列の結果セットに対し、ビット フラグが追加されます。 すべての変更ラッパーでは、__CDC_OPERATIONが 'D'、'I'、または 'UO' の場合、ビット フラグは常に NULL になります。 __CDC_OPERATIONが 'UN' の場合、更新操作によって列が変更されたかどうかに応じて、フラグは 1 または 0 に設定されます。

変更データ キャプチャ構成テンプレート 'Schema の CDC ラッパー TVF のインスタンス化' は、 sp_cdc_generate_wrapper_function ストアド プロシージャを使用して、スキーマの定義済みクエリ関数のすべてのラッパー関数の CREATE スクリプトを取得する方法を示しています。 その後、テンプレートによってこれらのスクリプトが作成されます。 テンプレートの詳細については、「 テンプレート エクスプローラー」を参照してください。

ラッパー関数 sys.fn_all_changes_<capture_instance>sys.fn_net_changes_<capture_instance> は、システム関数の cdc.fn_cdc_get_all_changes_<capture_instance>cdc.fn_cdc_get_net_changes_<capture_instance>に依存します。 指定された LSN 範囲が、 cdc.fn_cdc_get_all_changes_<capture_instance> または cdc.fn_cdc_get_net_changes_<capture_instance>を呼び出すときに適切でない場合は、エラー 313 が予期されます。 lsn_value パラメーターが最も低い LSN または最大 LSN の時間を超えている場合、これらの関数の実行はエラー 313: Msg 313, Level 16, State 3, Line 1 An insufficient number of arguments were supplied for the procedure or functionで返されます。 このエラーは、開発者が処理する必要があります。

参照