次の方法で共有


sys.fn_net_changes_<capture_instance> (Transact-SQL)

適用対象: SQL Server

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

Transact-SQL 構文表記規則

構文

  
fn_net_changes_<capture_instance> ('start_time', 'end_time', '<row_filter_option>' )  
  
<capture_instance> ::= The name of the capture instance.  
<row_filter_option> ::=  
{ all  
  | all with mask  
  | all with merge  
}  

引数

start_time

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

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

この引数に 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

    __$start_lsn の値を持ち、対応するコミット時間がstart_time以下のcdc.<capture_instance>_CT変更テーブルの行のみが結果セットに含まれます。

  • @closed_high_end_point = 0

    結果セットには、__$start_lsn の値を持ち、対応するコミット時間がstart_timeより厳密に短いcdc.<capture_instance>_CT変更テーブルの行のみが含まれます。

この引数に 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 with mask | all with merge }

メタデータ列の内容と、結果セットで返される行を管理するオプション。 次のいずれかのオプションを指定できます。

すべて
変更された行の最終的な内容がコンテンツ列に返され、その行を適用するために必要な操作がメタデータ列 __CDC_OPERATION に返されます。

すべてマスク付き
変更されたすべての行の最終的な内容がコンテンツ列に返され、その各行を適用するために必要な操作がメタデータ列 __CDC_OPERATION に返されます。 ラッパー関数の作成スクリプトの生成時に更新フラグの一覧を指定した場合、このオプションを使用して更新マスクを設定する必要があります。

すべてマージあり
変更されたすべての行の最終的な内容がコンテンツ列に返されます。

__CDC_OPERATION 列の値は、次の 2 つのいずれかになります。

  • 行を削除する必要がある場合は D。

  • 行を挿入または更新する必要がある場合は M

変更を適用するために挿入と更新のどちらが必要であるかを特定するロジックでは、クエリが複雑になってしまいます。 挿入操作と更新操作を区別する必要がない場合にパフォーマンスを向上させるには、このオプションを使用します。 この方法は、マージ操作を直接使用できるターゲット環境で最適です。

返されるテーブル

列名 列の種類 説明
<の列 @column_list> 状況に応じて異なる ラッパーを作成するスクリプトを生成するために呼び出されたときにsp_cdc_generate_wrapper_functionに対するcolumn_list引数で識別される列。 column_listが NULL の場合、追跡対象のすべてのソース列が結果セットに表示されます。
__CDC_OPERATION nvarchar(2) ターゲット環境に行を適用するために必要な操作を示す操作コード。 この操作は、次の呼び出しで指定される引数 row_filter_option の値によって異なります。

row_filter_option = 'all' , 'all with mask'

'D' - 削除操作

'I' - 挿入操作

'UN' : 更新操作

row_filter_option = 'all with merge'

'D' - 削除操作

'M' : 挿入操作または更新操作
<の列 @update_flag_list> bit 列名の後に "_uflag" が付加されている、ビット フラグです。 フラグは、 row_filter_option = 'all with mask' 、__CDC_OPERATION = 'UN'の場合にのみ NULL 以外の値を受け取ります。 対応する列がクエリ ウィンドウ内で変更された場合は、1 に設定されます。 それ以外の場合は、0 に設定されます。

解説

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

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

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

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

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

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

net の変更によって返される結果セットラッパー関数は、ラッパーが生成されたときに@column_listにあった追跡された列のみを返します。 @column_listが NULL の場合は、追跡対象のすべてのソース列が返されます。 ソース列に続いて、操作列 __CDC_OPERATION が返されます。これは、操作を表す 1 文字か 2 文字の列です。

次に、@update_flag_list パラメーターで指定された各列の結果セットに対し、ビット フラグが追加されます。 net の変更ラッパーの場合、ラッパー関数の呼び出しで使用される@row_filter_optionが 'all' または 'all with merge' の場合、ビット フラグは常に NULL になります。 @row_filter_optionが 'all with mask' に設定され、__CDC_OPERATIONが 'D' または 'I' の場合、フラグの値も NULL になります。 __CDC_OPERATIONが 'UN' の場合、 net 更新操作によって列が変更されたかどうかに応じて、フラグは 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で返されます。 このエラーは、開発者が処理する必要があります。

参照