cdc.fn_cdc_get_all_changes_ < capture_instance > (Transact-SQL)
適用於:SQL Server
針對套用至指定記錄序號 (LSN) 範圍內來源資料表的每個變更,各傳回一個資料列。 如果來來源資料列在間隔期間有多個變更,則每個變更都會在傳回的結果集中表示。 除了傳回變更資料之外,四個中繼資料行還提供您需要將變更套用至另一個資料來源的資訊。 資料列篩選選項會控管中繼資料行的內容,以及結果集中傳回的資料列。 指定 'all' 資料列篩選選項時,每個變更只有一個資料列來識別變更。 指定 [所有更新舊版] 選項時,更新作業會以兩個數據清單示:一個包含更新前所擷取資料行的值,另一個包含更新後所擷取資料行的值。
此列舉函式會在啟用來源資料表以進行異動資料擷取時建立。 函式名稱是衍生的,並使用格式 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 | 所有更新舊的 }
選項,可控管中繼資料行的內容,以及結果集中傳回的資料列。
可以是下列其中一個選項:
全部
傳回指定 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 時 ,資料型 別 image 、 text 和 Ntext 的資料行一律會指派 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
。 開發人員應該處理此錯誤。 如需因應措施的範例 T-SQL,請參閱 GitHub 上的 ReplTalk。
範例
有數個 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
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應