cdc.fn_cdc_get_all_changes_capture_instance < > (Transact-SQL)

適用対象: はいSQL Server (サポートされているすべてのバージョン)

指定したログ シーケンス番号 (LSN) 範囲内のソース テーブルに適用される変更ごとに 1 行を返します。 該当する期間中、1 つのソース行に複数の変更が加えられた場合、返される結果セットには、それぞれの変更が格納されます。 変更データを返すだけでなく、4 つのメタデータ列によって、変更を別のデータ ソースに適用するために必要な情報が提供されます。 行フィルター オプションは、メタデータ列の内容と、結果セットで返される行を制御します。 'all' 行フィルター オプションが指定されている場合、各変更には、変更を識別するための行が 1 行に限り含されます。 "all update old" オプションを指定すると、更新操作は 2 つの行として表されます。1 つは更新前にキャプチャされた列の値を含み、もう 1 つは更新後にキャプチャされた列の値を含む行です。

この列挙関数は、ソース テーブルで変更データ キャプチャが有効になっている時点で作成されます。 関数名は派生し、ソース テーブルで変更データ キャプチャが有効になっている場合に、capture_instance がキャプチャ インスタンスに指定された値である形式 cdc.fn_cdc_get_all_changes_<capture_instance> を使用します。

トピック リンク アイコン Transact-SQL 構文表記規則

構文

  
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) です

値が __$start_lsn 以上 from_lsn 以上 to_lsn 以下である cdc.[capture_instance]_CTテーブル内の行だけが結果セットに含まれます。

<row_filter_option> ::= { all | update old }

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

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

all
指定した LSN 範囲内のすべての変更を返します。 更新操作で生じた変更の場合、更新適用後の新しい値を格納した行だけが返されます。

all update old
指定した LSN 範囲内のすべての変更を返します。 更新操作による変更の場合、このオプションは、更新前の列値を含む行と、更新後の列値を含む行の両方を返します。

返されるテーブル

列名 データ型 説明
__$start_lsn binary(10) 変更のコミット順序を保持する変更に関連付けられている LSN をコミットします。 同じトランザクションでコミットされた変更は、同じコミット LSN 値を共有します。
__$seqval binary(10) トランザクション内の行に対する変更の順序付けに使用されるシーケンス値。
__$operation int 変更データ行をターゲット データ ソースに適用するために必要なデータ操作言語 (DML) 操作を識別します。 以下のいずれかを指定できます。

1 = 削除

2 = 挿入

3 = 更新 (キャプチャされる列値は更新操作前の値)。 この値が該当するのは、行フィルター オプションに 'all update old' を指定した場合だけです。

4 = update (キャプチャされた列の値は、更新操作後の値)
__$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'.

解説

$operation = 1 または **$operation** = 3 の場合、データ型 image、text、ntext の列には常に NULL 値が割り当てられます。 データ型 varbinary(max) 、varchar(max)または nvarchar(max) の列には、更新中に列が変更されていない限り 、__$operation = 3 の場合は NULL 値が割り当てられます。 __$operation = 1 の場合、これらの列には削除時に値が割り当てられます。 キャプチャ インスタンスに含まれる計算列の値は、常に NULL になります。

または を呼び出す際に指定された LSN 範囲が適切ではない場合、エラー 313 が発生する可能性 cdc.fn_cdc_get_all_changes_<capture_instance> があります cdc.fn_cdc_get_net_changes_<capture_instance> 。 パラメーターが最も低い LSN または最大の LSN の時間を超えている場合、これらの関数の実行はエラー lsn_value 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 。 詳細については、「テンプレート エクスプローラー」 を参照してください

この例は、Enumerate All Changes for Valid Range Template を示しています。 この例では、関数 cdc.fn_cdc_get_all_changes_HR_Department を使用して、AdventureWorks2012 データベース内の HumanResources.Department ソース テーブルに対して定義されているキャプチャ インスタンス HR_Department で現在使用できる変更をすべてレポートします。

-- ========  
-- Enumerate All Changes for Valid Range Template  
-- ========  
USE AdventureWorks2012;  
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  

参照