cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL)
指定されたログ シーケンス番号 (LSN) の範囲内で、ソース テーブルに適用された各変更につき 1 行を返します。該当する期間中、1 つのソース行に複数の変更が加えられた場合、返される結果セットには、それぞれの変更が格納されます。返された変更データおよび 4 つのメタデータ列によって、他のデータ ソースにその変更を適用するために必要な情報を得ることができます。結果セットとして返される行およびメタデータ列の内容は、行のフィルタ選択オプションによって制御されます。行のフィルタ選択オプションに 'all' を指定した場合、それぞれの変更について、対応する 1 行が返されます。'all update old' オプションを指定した場合、更新操作は、更新前と更新後のキャプチャ対象列の値を格納する 2 つの行で表されます。
この列挙関数は、ソース テーブルに対して変更データ キャプチャを有効にした時点で作成されます。関数名は、**cdc.fn_cdc_get_all_changes_**capture_instance の形式で付けられます。capture_instance は、ソース テーブルの変更データ キャプチャを有効にしたときに、キャプチャ インスタンスに対して指定された値です。
構文
cdc.fn_cdc_get_all_changes_capture_instance ( from_lsn , to_lsn , '<row_filter_option>' )
<row_filter_option> ::=
{ all
| all update old
}
引数
from_lsn
結果セットに含める LSN 範囲の下端を表す LSN 値を指定します。from_lsn のデータ型は binary(10) です。結果セットには、cdc.[capture_instance]_CT 変更テーブル内の行のうち、__$start_lsn の値が from_lsn 以上である行だけが格納されます。
to_lsn
結果セットに含める LSN 範囲の上端を表す LSN 値を指定します。to_lsn のデータ型は binary(10) です。結果セットには、cdc.[capture_instance]_CT 変更テーブル内の行のうち、__$start_lsn の値が from_lsn 以下または to_lsn と等しい行だけが格納されます。
<row_filter_option> ::= { all | all update old }
結果セットとして返される行およびメタデータ列の内容を制御するオプションです。次のいずれかのオプションを指定できます。
all
指定された LSN 範囲内のすべての変更を返します。更新操作で生じた変更の場合、更新適用後の新しい値を格納した行だけが返されます。all update old
指定された LSN 範囲内のすべての変更を返します。更新操作で生じた変更の場合、更新前と更新後の列値を格納した行が返されます。
返されるテーブル
列名 |
データ型 |
説明 |
---|---|---|
__$start_lsn |
binary(10) |
変更に関連付けられたコミット LSN。この LSN によって変更のコミット順が維持されます。同じトランザクションでコミットされた変更は、同じコミット LSN 値を共有します。 |
__$seqval |
binary(10) |
特定のトランザクションに含まれる行の変更を並べ替えるためのシーケンス値。 |
__$operation |
int |
変更データの行をターゲット データ ソースに適用するために必要となった DML (データ操作言語) 操作を識別します。次のいずれかです。 1 = 削除 2 = 挿入 3 = 更新 (キャプチャされる列値は更新操作前の値)。この値が該当するのは、行フィルタ オプションに 'all update old' を指定した場合だけです。 4 = 更新 (キャプチャされる列値は更新操作後の値) |
__$update_mask |
varbinary(128) |
キャプチャ インスタンスに対して指定された各キャプチャ対象列に対応するビットを持ったビット マスク。__$operation が 1 または 2 の場合、定義されているすべてのビットが 1 に設定されます。__$operation が 3 または 4 の場合、変更された列に対応するビットだけが 1 に設定されます。 |
<キャプチャされたソース テーブル列> |
各種 |
この関数によって返されるその他の列は、キャプチャ インスタンスの作成時に指定されたキャプチャ対象列です。キャプチャ対象列リストで列が指定されなかった場合、ソース テーブルのすべての列が返されます。 |
権限
固定サーバー ロール sysadmin または固定データベース ロール db_owner のメンバシップである必要があります。それ以外のすべてのユーザーについては、ソース テーブルのすべてのキャプチャ対象列に対する SELECT 権限が必要です。さらに、キャプチャ インスタンスのゲーティング ロールが定義されている場合は、そのデータベース ロールのメンバシップが必要です。呼び出し元にソース データを表示する権限がない場合、エラー 229 ("SELECT 権限がオブジェクト 'fn_cdc_get_all_changes_...'、データベース '<DatabaseName>'、スキーマ 'cdc' で拒否されました。") が返されます。
説明
指定した LSN 範囲が、キャプチャ インスタンスの変更追跡時間外に該当した場合、エラー 208 ("プロシージャまたは関数 cdc.fn_cdc_get_all_changes に指定された引数が不足しています。") が返されます。
__$operation = 1 または __$operation = 3 の場合、データ型が image、text、ntext の列には、常に NULL 値が割り当てられます。__$operation = 3 の場合、更新中に列が変更されていない限り、データ型が varbinary(max)、varchar(max)、nvarchar(max) の列には、NULL 値が割り当てられます。__$operation = 1 の場合、これらの列には削除時点の値が割り当てられます。キャプチャ インスタンスに含まれる計算列の値は、常に NULL になります。
例
変更データ キャプチャのクエリ関数の使用方法を示す SQL Server Management Studio テンプレートがいくつか用意されています。これらのテンプレートは、Management Studio の [表示] メニューで使用できます。詳細については、「SQL Server Management Studio テンプレートの使用」を参照してください。
この例は、Enumerate All Changes for Valid Range Template を示しています。この例では、関数 cdc.fn_cdc_get_all_changes_HR_Department を使用して、AdventureWorks データベース内の HumanResources.Department ソース テーブルに対して定義されているキャプチャ インスタンス HR_Department で現在使用できる変更をすべてレポートします。
-- ==================================================
-- Enumerate All Changes for Valid Range Template
-- ==================================================
USE AdventureWorks
GO
DECLARE @from_lsn binary(10), @to_lsn binary(10)
SET @from_lsn =
sys.fn_cdc_get_min_lsn('HR_Department')
SET @to_lsn = sys.fn_cdc_get_max_lsn()
SELECT * FROM cdc.fn_cdc_get_all_changes_HR_Department
(@from_lsn, @to_lsn, N'all')
GO