<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 值。

结果集中仅包含具有严格大于start_time的关联提交时间的更改表中的行cdc.<capture_instance>_CT

如果为此参数提供 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

    结果集中仅包含值 __$start_lsn 的更改表中的行 cdc.<capture_instance>_CT 以及小于或等于 start_time 的相应提交时间。

  • @closed_high_end_point = 0

    结果集中仅包含值 __$start_lsn 的更改表中的行 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。 此错误应由开发人员处理。

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

控制元数据列的内容和结果集中所返回的行的选项。 可以是下列选项之一:

全部
返回更改了内容列的某一行的最终内容,以及在元数据列 __CDC_OPERATION 中应用该行所需的操作。

all with mask
返回所有更改了内容列的行的最终内容,以及在元数据列 __CDC_OPERATION 中应用每一行所需的操作。 如果在生成用于创建包装函数的脚本时指定了更新标志列表,则需要使用此选项来填充更新掩码。

all with merge
返回内容列中所有已更改的行的最终内容。

列 __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 参数中标识的每个列的结果集的末尾。 对于净更改包装器,如果@row_filter_option对包装函数的调用中使用的位标志为“all”或“all with merge”,则位标志将始终为 NULL。 @row_filter_option如果设置为“所有掩码”,并且__CDC_OPERATION为“D”或“I”,则标志的值也将为 NULL。 如果__CDC_OPERATION为“UN”,则标志将设置为 1 或 0,具体取决于网络更新操作是否导致对列进行更改。

变更数据捕获配置模板“实例化 CDC 包装器 TVF for Schema”演示如何使用 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>。 如果提供的 LSN 范围在调用或调用cdc.fn_cdc_get_all_changes_<capture_instance>cdc.fn_cdc_get_net_changes_<capture_instance>时不适用,则预期会出现错误 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 此错误应由开发人员处理。

另请参阅