cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL)
適用対象:SQL Server
指定したログ シーケンス番号 (LSN) 範囲内のソース テーブルに適用された変更ごとに 1 行を返します。 該当する期間中、1 つのソース行に複数の変更が加えられた場合、返される結果セットには、それぞれの変更が格納されます。 変更データを返すだけでなく、4 つのメタデータ列によって、変更を別のデータ ソースに適用するために必要な情報が提供されます。
行フィルター オプションは、メタデータ列の内容と、結果セットで返される行を制御します。 すべての 行フィルター オプションが指定されている場合、各変更には変更を識別するための行が 1 つだけ含まれます。 すべての更新プログラムの古い オプションが指定されている場合、更新操作は 2 つの行として表されます。1 つは更新前にキャプチャされた列の値を含み、もう 1 つは更新後にキャプチャされた列の値を含みます。
この列挙関数は、ソース テーブルで変更データ キャプチャが有効になっている時点で作成されます。 関数名は派生し、 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]_CTfrom_lsn 以上の値 __$start_lsn
値を持つ変更テーブルが結果セットに含まれます。
to_lsn
結果セットに含める LSN 範囲の上端を表す LSN 値を指定します。 to_lsn は binary(10)です。
cdc 内の行のみ。[capture_instance]_CTfrom_lsn 以下の値 __$start_lsn
、to_lsn 以下の値を持つ変更テーブルが結果セットに含まれます。
<row_filter_option>
メタデータ列の内容と、結果セットで返される行を制御するオプション。
次のいずれかのオプションを指定できます。
すべての を
する 指定した LSN 範囲内のすべての変更を返します。 更新操作で生じた変更の場合、更新適用後の新しい値を格納した行だけが返されます。
すべての更新プログラムの古い を
する 指定した LSN 範囲内のすべての変更を返します。 更新操作による変更の場合、このオプションは、更新前の列値を含む行と、更新後の列値を含む行の両方を返します。
返されるテーブル
列名 | データ型 | 説明 |
---|---|---|
__$start_lsn |
binary(10) | 変更のコミット順序を保持する変更に関連付けられている LSN をコミットします。 同じトランザクションでコミットされた変更は、同じコミット LSN 値を共有します。 |
__$seqval |
binary(10) | トランザクション内の行に対する変更を並べ替えるために使用されるシーケンス値。 |
__$operation |
int | 変更データの行をターゲット データ ソースに適用するために必要なデータ操作言語 (DML) 操作を識別します。 次のいずれかの値を指定できます。1 = 削除2 = insert3 = 更新 (キャプチャされた列の値は、更新操作の前の列値)。 この値が該当するのは、行フィルター オプションに 'all update old' を指定した場合だけです。4 = 更新 (キャプチャされた列の値は更新操作後の列値) |
__$update_mask |
varbinary (128) | キャプチャ インスタンスに対して指定された各キャプチャ対象列に対応するビットを持ったビット マスク。 この値には、__$operation が 1 または 2 されるときに、定義されているすべてのビットが 1 に設定されます。
__$operation が 3 または 4 の場合、変更された列に対応するビットのみが 1 に設定されます。 |
<captured source table columns> |
多様 | 関数によって返される残りの列は、キャプチャ インスタンスの作成時に識別されるキャプチャ列です。 キャプチャ対象列リストで列が指定されなかった場合、ソース テーブルのすべての列が返されます。 |
アクセス許可
sysadmin固定サーバー ロールまたは固定データベース ロールdb_ownerメンバーシップが必要です。 他のすべてのユーザーには、ソース テーブル内のキャプチャされたすべての列に対する SELECT アクセス許可と、キャプチャ インスタンスのゲーティング ロールが定義されている場合は、そのデータベース ロールのメンバーシップが必要です。 呼び出し元にソース データを表示するアクセス許可がない場合、関数はエラー 229 を返します。
The SELECT permission was denied on the object 'fn_cdc_get_all_changes_...', database '<DatabaseName>', schema 'cdc'.
解説
データ型 イメージ、テキスト、および n テキスト の列には、__$operation
が 1
または __$operation
が 3
されるときに、常に NULL
値が割り当てられます。 データ型 varbinary(max)、varchar(max)、または nvarchar(max) の列には、更新中に列が変更されない限り、__$operation
が 3
されるときに NULL
値が割り当てられます。
__$operation
が 1
されると、削除時にこれらの列に値が割り当てられます。 キャプチャ インスタンスに含まれる計算列の値は常に NULL
です。
cdc.fn_cdc_get_all_changes_<capture_instance>
または cdc.fn_cdc_get_net_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.
このエラーは、開発者が処理する必要があります。
例
変更データ キャプチャ クエリ関数の使用方法を示す SQL Server Management Studio テンプレートがいくつか用意されています。 これらのテンプレートは、Management Studio の View メニューで使用できます。 詳細については、「 Template Explorer」を参照してください。
この例は、Enumerate All Changes for Valid Range Template
を示しています。 この関数 cdc.fn_cdc_get_all_changes_HR_Department
を使用して、キャプチャ インスタンス HR_Department
に対して現在使用可能なすべての変更を報告します。これは、AdventureWorks2022
データベース内のソース テーブル HumanResources.Department
に対して定義されています。
-- Enumerate All Changes for Valid Range Template
USE AdventureWorks2022;
GO
DECLARE @from_lsn AS BINARY (10), @to_lsn AS 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