Share via


<sys.fn_all_changes_capture_instance> (Transact-SQL)

適用対象:SQL Server

すべての変更クエリ関数のラッパー。 これらの関数を作成するために必要なスクリプトは、ストアド プロシージャによって 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>_CTstart_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

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

  • @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 }

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

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

all
指定した 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 値の間で必要なすべての変換を実行します。 ラッパー関数を連続して使用して変更データのストリームを処理する場合、次の規則に従 @end_time っている場合、データが失われたり繰り返されたりしないようにします。1 つの呼び出しに関連付けられた間隔の値は、後続の呼び出しに関連付けられた間隔の値として @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>に依存します。 または cdc.fn_cdc_get_net_changes_<capture_instance>を呼び出cdc.fn_cdc_get_all_changes_<capture_instance>すときに、指定された LSN 範囲が適切でない場合、エラー 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で返されます。 このエラーは、開発者が処理する必要があります。 回避策の T-SQL のサンプルについては、 GitHub の ReplTalk を参照してください。

参照