<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

日期/时间值,该值表示要包含在结果集中的更改表条目范围的低终结点。

结果集中仅包含更改表中关联提交时间严格大于 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

日期/时间值,该值表示要包含在结果集中的更改表条目范围的高终结点。

此参数可以采用两种含义之一,具体取决于在调用 以生成用于创建包装函数的脚本时sys.sp_cdc_generate_wrapper_function选择@closed_high_end_point的值:

  • @closed_high_end_point = 1

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

  • @closed_high_end_point = 0

    结果集中仅包含更改表中值为 __$start_lsn 且相应提交时间严格小于 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。 此错误应由开发人员处理。

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

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

all
返回更改了内容列的某一行的最终内容,以及在元数据列 __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中标识的每个列的结果集中。 对于 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,具体取决于 更新操作是否导致列发生更改。

更改数据捕获配置模板“实例化适用于架构的 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_all_changes_<capture_instance>cdc.fn_cdc_get_net_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

另请参阅