<sys.fn_net_changes_capture_instance> (Transact-SQL)

適用対象:SQL Server

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

結果セットには、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、__$start_lsnの値と、start_time以下の対応するコミット時間を持つ変更テーブル内の行のみが含まれます。

  • @closed_high_end_point = 0

    結果セットには、 cdc.<capture_instance>_CT __$start_lsnの値を持ち、対応するコミット時間が 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) が返されます。 このエラーは、開発者が処理する必要があります。

<>row_filter_option ::= { all | all with mask | all with merge }

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

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

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

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

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

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

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

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

返されるテーブル

列名 列の型 説明
<の列 @column_list> 状況に応じて異なる ラッパーを作成するスクリプトを生成するために呼び出されたときに に対する sp_cdc_generate_wrapper_functioncolumn_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 値の間で必要なすべての変換を実行します。 ラッパー関数を使用して変更データのストリームを処理する場合、次の規則に従 @end_time えば、データが失われたり繰り返されたりしないようにします。1 つの呼び出しに関連付けられた間隔の値は、後続の呼び出しに関連付けられた間隔の値として @start_time 指定されます。

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

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

その後、 パラメーター @update_flag_listで識別される各列の結果セットにビット フラグが追加されます。 net changes ラッパーの場合、ラッパー関数の呼び出しで使用される が 'all' または 'all with merge' の場合@row_filter_option、ビット フラグは常に NULL になります。 @row_filter_optionが 'all with mask' に設定され、__CDC_OPERATIONが 'D' または 'I' の場合、フラグの値も NULL になります。 __CDC_OPERATIONが 'UN' の場合、 net update 操作によって列が変更されたかどうかに応じて、フラグは 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 を参照してください。

参照