分享方式:


cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL)

適用於:SQL Server

針對套用至指定記錄序號 (LSN) 範圍內源數據表的每個變更,各傳回一個數據列。 如果來源數據列在間隔期間有多個變更,則每個變更都會在傳回的結果集中表示。 除了傳回變更數據之外,四個元數據行還提供您需要將變更套用至另一個數據源的資訊。 數據列篩選選項會控管元數據行的內容,以及結果集中傳回的數據列。 指定 'all' 資料列篩選選項時,每個變更只有一個數據列來識別變更。 指定 [所有更新舊版] 選項時,更新作業會以兩個數據列表示:一個包含更新前所擷取數據行的值,另一個包含更新後所擷取數據行的值。

此列舉函式會在啟用源數據表以進行異動數據擷取時建立。 函式名稱是衍生的,並使用格式 cdc.fn_cdc_get_all_changes_<capture_instance> ,其中 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)

只有 cdc 中的數據列。[capture_instance]_CT在 __$start_lsn 大於或等於from_lsn且小於或等於to_lsn的值變更數據表會包含在結果集中。

<> row_filter_option ::= { all | 所有更新舊的 }

選項,可控管元數據行的內容,以及結果集中傳回的數據列。

可以是下列其中一個選項:

全部
傳回指定 LSN 範圍內的所有變更。 對於因更新作業而進行的變更,此選項只會傳回在套用更新之後包含新值的數據列。

所有更新舊版
傳回指定 LSN 範圍內的所有變更。 對於因更新作業而變更,此選項會傳回更新之前包含數據行值的數據列,以及更新之後包含數據行值的數據列。

傳回的資料表

資料行名稱 資料類型 描述
__$start_lsn binary(10) 認可與保留變更認可順序的變更相關聯的 LSN。 相同交易中認可的變更會共用相同的認可 LSN 值。
__$seqval binary(10) 用來排序交易內數據列變更的順序值。
__$operation int 識別將變更數據列套用至目標數據源所需的數據操作語言 (DML) 作業。 可以是下列其中一項:

1 = 刪除

2 = 插入

3 = update (擷取的數據行值是在更新作業之前的值)。 只有在指定數據列篩選選項 『all update old』 時才適用這個值。

4 = update (擷取的數據行值是在更新作業之後)
__$update_mask varbinary(128) 位遮罩,其位對應至針對擷取實例識別的每個擷取數據行。 當 __$operation = 1 或 2 時,這個值已將所有定義的位設定為 1。 當 __$operation = 3 或 4 時,只有對應至已變更之數據行的位會設定為 1。
<擷取的來源資料表資料行> 視情況而異 函式傳回的其餘數據行是建立擷取實例時所識別的擷取數據行。 如果未在擷取的數據行清單中指定任何數據行,則會傳回源數據表中的所有數據行。

權限

需要系統管理員固定伺服器角色的成員資格,或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 時,數據型別 imagetextntext 的數據行一律會指派 NULL 值。 除非數據行在更新期間變更,否則數據類型 varbinary(max)varchar(max)nvarchar(max) 的數據行會在 __$operation = 3 時指派 NULL 值。 當 __$operation = 1 時,這些數據行會在刪除時指派其值。 擷取實例中包含的計算數據行一律具有NULL 值。

如果呼叫 或 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。 開發人員應該處理此錯誤。

範例

有數個 SQL Server Management Studio 範本可供使用,示範如何使用異動數據擷取查詢函式。 這些範本可在 Management Studio 的 [ 檢視 ] 選單上取得。 如需詳細資訊,請參閱 範本總管

這個範例顯示 Enumerate All Changes for Valid Range Template。 它會使用 函式 cdc.fn_cdc_get_all_changes_HR_Department 來報告擷取實例 HR_Department目前可用的所有變更,這是針對資料庫中的源數據表 HumanResources.Department AdventureWorks2022 所定義。

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

另請參閱