Share via


<sys.fn_net_changes_capture_instance > (Transact-SQL)

適用於:SQL Server

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

Transact-SQL 語法慣例

語法

  
fn_net_changes_<capture_instance> ('start_time', 'end_time', '<row_filter_option>' )  
  
<capture_instance> ::= The name of the capture instance.  
<row_filter_option> ::=  
{ all  
  | all with mask  
  | all with merge  
}  

引數

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 值,表示要包含在結果集中之變更資料表專案範圍的高端點。

此參數可以採用兩種意義之一,視呼叫 時選擇的值來 @closed_high_end_pointsys.sp_cdc_generate_wrapper_function 產生腳本以建立包裝函式:

  • @closed_high_end_point = 1

    只有變更資料表中 cdc.<capture_instance>_CT 具有 __$start_lsn 值的資料列,且結果集中會包含小於或等於 start_time 的對應認可時間。

  • @closed_high_end_point = 0

    只有變更資料表中的資料 cdc.<capture_instance>_CT 列,其值為 __$start_lsn,且對應的認可時間嚴格小於 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。 開發人員應該處理此錯誤。

<> row_filter_option ::= { all | all with mask | all with merge }

選項,可控管中繼資料行的內容,以及結果集中傳回的資料列。 可以是下列其中一個選項:

全部
傳回內容資料行中已變更資料列的最終內容,以及在中繼資料行中套用資料列所需的作業__CDC_OPERATION。

全部含遮罩
傳回內容資料行中所有已變更資料列的最終內容,以及在中繼資料行中套用每個資料列所需的作業__CDC_OPERATION。 如果您在產生腳本以建立包裝函式時指定更新旗標清單,則需要此選項才能填入更新遮罩。

全部合併
傳回內容資料行中所有已變更資料列的最終內容。

資料行__CDC_OPERATION將是下列兩個值之一:

  • D,如果必須刪除資料列,則為 。

  • M,如果必須插入或更新資料列,則為 。

判斷是否需要插入或更新,才能將變更套用至目標,以增加查詢複雜性的邏輯。 當不需要區分插入和更新作業時,請使用此選項來改善效能。 這種方法最適合直接使用合併作業的目標環境中。

傳回的資料表

資料行名稱 欄類型 描述
<資料行來自 @column_list> 不同 呼叫 column_list 引數中 識別的資料 sp_cdc_generate_wrapper_function 行,以產生腳本來建立包裝函式。 如果 column_list 為 Null,所有追蹤的來源資料行都會出現在結果集中。
__CDC_OPERATION Nvarchar(2) 作業程式碼,指出將資料列套用至目標環境所需的作業。 此作業會根據下列呼叫中提供的引數 值row_filter_option 而有所不同:

row_filter_option = 'all' , 'all with mask'

'D' - 刪除作業

'I' - 插入作業

'UN' - 更新作業

row_filter_option = 'all with merge'

'D' - 刪除作業

'M' - 插入作業或更新作業
<資料行來自 @update_flag_list> bit 將_uflag附加至資料行名稱所命名的位旗標。 只有當row_filter_option = 'all with mask' 和 __CDC_OPERATION = 'UN' ,旗標才會採用非 Null 值。 如果在查詢視窗中修改對應的資料行,則會設定為 1。 否則為 0。

備註

fn_net_changes_<capture_instance> 式可作為查詢函式的 cdc.fn_cdc_get_net_changes_<capture_instance> 包裝函式。 預 sys.sp_cdc_generate_wrapper 存程式是用來建立包裝函式的腳本。

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

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

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

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

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

net changes 包裝函式所 傳回的結果集只會傳回產生包裝函式時位於 的 @column_list 追蹤資料行。 如果 @column_list 為 Null,則會傳回所有追蹤的來來源資料行。 來源資料行後面接著作業資料行,__CDC_OPERATION,這是識別作業的一或兩個字元資料行。

然後,位旗標會附加至參數 @update_flag_list 中所識別之每個資料行的結果集。 對於 net changes 包裝函式,如果 @row_filter_option 包裝函式呼叫中使用的 是 'all' 或 'all with merge',則位旗標一律為 Null。 @row_filter_option如果 設為 'all with mask',且__CDC_OPERATION為 'D' 或 'I',則旗標的值也會是 Null。 如果__CDC_OPERATION為 「UN」,則旗標會設定為 1 或 0,視 net update 作業是否 對資料行造成變更而定。

異動資料擷取組態範本「具現化架構的 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。

另請參閱