共用方式為


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

另請參閱