<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) 。
語法
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
存程式可用來產生腳本來建立包裝函式。
不會自動建立包裝函式。 您必須執行兩項動作,才能建立包裝函式:
執行預存程式以產生腳本來建立包裝函式。
執行腳本以實際建立包裝函式。
包裝函式可讓使用者有系統地查詢日期時間值所限定間隔內發生的變更,而不是 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
。 開發人員應該處理此錯誤。