Share via


<sys.fn_all_changes_capture_instance > (Transact-SQL)

適用於:SQL Server

所有變更 查詢函式的 包裝函式。 建立這些函式所需的腳本是由預存程式所產生 sys.sp_cdc_generate_wrapper_function 。 如需用來建立 sys.fn_all_changes_<capture_instance> 之預存程式的詳細資訊,請參閱 sys.sp_cdc_generate_wrapper_function (Transact-SQL)

Transact-SQL 語法慣例

語法

fn_all_changes_<capture_instance> ('start_time' ,'end_time', '<row_filter_option>' )  
  
<capture_instance> ::= The name of the capture instance.  
<row_filter_option> ::=  
{ all  
  | all update old  
}  

引數

start_time

datetime 值,表示要包含在結果集中之變更資料表專案範圍的低端點。

只有變更資料表中 cdc.<capture_instance>_CT 具有大於 start_time 之相關聯認可時間的資料列才會包含在結果集中。

如果為此引數提供 Null 值,則查詢範圍的低端點會對應至擷取實例有效範圍的低端點。

如果 @start_time 或 @end_time 參數的值超出最低 LSN 或最高 LSN 的時間,則產生的包裝函式執行會傳回錯誤 313:Msg 313, Level 16, State 3, Line 1 An insufficient number of arguments were supplied for the procedure or function。 開發人員應該處理此錯誤。

end_time

datetime 值,表示要包含在結果集中之變更資料表專案範圍的高端點。

此參數可以根據呼叫 時 sys.sp_cdc_generate_wrapper_function 選擇的值, @closed_high_end_point 為包裝函式產生建立腳本,採用兩種可能的意義之一:

  • @closed_high_end_point = 1

    結果集中只會包含變更資料表中 cdc.<capture_instance>_CT 相關聯認可時間小於或等於end_time的資料列。

  • @closed_high_end_point = 0

    只有變更資料表中 cdc.capture_instance_CT 具有相關聯認可時間的資料列嚴格小於end_time才會包含在結果集中。

如果為此引數提供 Null 值,查詢範圍的高端點會對應至擷取實例有效範圍的高端點。

如果 @start_time 或 @end_time 參數的值超出最低 LSN 或最高 LSN 的時間,則產生的包裝函式執行會傳回錯誤 313:Msg 313, Level 16, State 3, Line 1 An insufficient number of arguments were supplied for the procedure or function。 開發人員應該處理此錯誤。

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

選項,可控管中繼資料行的內容,以及結果集中傳回的資料列。

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

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

所有更新舊版
傳回指定 LSN 範圍內的所有變更。 對於因為更新作業而發生的變更,此選項會傳回包含更新之前和更新之後資料行值的兩個數據列。

傳回的資料表

資料行名稱 欄類型 描述
__CDC_STARTLSN binary(10) 與變更相關聯的交易認可 LSN。 在相同交易中認可的所有變更都會共用相同的認可 LSN。
__CDC_SEQVAL binary(10) 用來排序交易內資料列變更的序列值。
<資料行來自 @column_list> 不同 呼叫 column_list 引數 sp_cdc_generate_wrapper_function 中所 識別的資料行,以產生建立包裝函式的腳本。
__CDC_OPERATION Nvarchar(2) 作業程式碼,指出將資料列套用至目標環境所需的作業。 它會根據呼叫中提供的引數 值row_filter_option 而有所不同:

row_filter_option = 'all'

'D' - 刪除作業

'I' - 插入作業

'UN' - 更新作業新值

row_filter_option = 'all update old'

'D' - 刪除作業

'I' - 插入作業

'UN' - 更新作業新值

'UO' - 更新作業舊值
<資料行來自 @update_flag_list> bit 位旗標是藉由將_uflag附加至資料行名稱來命名。 當 __CDC_OPERATION 為 'D'、'I'、'UO' 時,旗標一律會設定為 Null。 當__CDC_OPERATION為 「UN」時,如果更新產生對應資料行的變更,則會將它設定為 1。 否則為 0。

備註

fn_all_changes_<capture_instance> 式可作為查詢函式的 cdc.fn_cdc_get_all_changes_<capture_instance> 包裝函式。 預 sys.sp_cdc_generate_wrapper 存程式可用來產生腳本來建立包裝函式。

不會自動建立包裝函式。 您必須執行兩項動作,才能建立包裝函式:

  1. 執行預存程式以產生腳本來建立包裝函式。

  2. 執行腳本以實際建立包裝函式。

包裝函式可讓使用者有系統地查詢日期時間 值所限定 間隔內發生的變更,而不是 LSN 值。 包裝函式會執行所提供 日期時間 值與內部所需的 LSN 值之間的所有必要轉換,做為查詢函式的引數。 當包裝函式序列使用來處理變更資料的資料流程時,它們可確保未遺失或重複任何資料,前提是遵循下列慣例: @end_time 與一個呼叫相關聯的間隔值會提供與 @start_time 後續呼叫相關聯的間隔值。

藉由在建立腳本時使用 @closed_high_end_point 參數,您可以產生包裝函式,以支援指定查詢視窗的封閉上限或開啟的上限。 也就是說,您可以決定認可時間等於擷取間隔上限的專案是否要包含在間隔中。 預設會包含上限。

所有變更 包裝函式所 傳回的結果集會分別傳回變更資料表的 __$start_lsn 和 __$seqval 資料行,做為資料行__CDC_STARTLSN和__CDC_SEQVAL。 它只會遵循這些追蹤資料行,這些資料行只會在 產生包裝函式時出現在 @column_list 參數中。 如果 @column_list 為 Null,則會傳回所有追蹤的來源資料行。 來源資料行後面接著作業資料行,__CDC_OPERATION,這是識別作業的一或兩個字元資料行。

然後,位旗標會附加至參數中所 @update_flag_list 識別之每個資料行的結果集。 對於所有變更 包裝函式,如果__CDC_OPERATION為 'D'、'I' 或 'UO',則位旗標一律為 Null。 如果__CDC_OPERATION為 「UN」,則旗標將會設定為 1 或 0,視更新作業是否對資料行造成變更而定。

異動資料擷取組態範本「具現化架構的 CDC 包裝函式 TVF」示範如何使用 sp_cdc_generate_wrapper_function 預存程式,取得架構所定義查詢函式之所有包裝函式的 CREATE 腳本。 然後範本會建立這些腳本。 如需範本的詳細資訊,請參閱 範本總管

包裝函 sys.fn_all_changes_<capture_instance> 式和 sys.fn_net_changes_<capture_instance> 相依于系統函 cdc.fn_cdc_get_all_changes_<capture_instance> 式和 cdc.fn_cdc_get_net_changes_<capture_instance> 。 如果呼叫 或 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。

另請參閱