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

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

结果集中仅包含具有大于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_point 何时调用以生成包装函数的创建脚本时 sys.sp_cdc_generate_wrapper_function 选择的值:

  • @closed_high_end_point = 1

    结果集中仅包含与end_time关联的提交时间小于或等于end_time的更改表中的行 cdc.<capture_instance>_CT

  • @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 范围内的所有更改。 对于由于更新操作而导致的更改,此选项仅返回在应用更新后包含新值的行。

all update old
返回指定 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 用于生成用于创建包装器的脚本。

不会自动创建包装函数。 必须做两件事,才能创建包装函数:

  1. 运行该存储过程以生成用于创建包装的脚本。

  2. 执行该脚本以实际创建包装函数。

包装器函数使用户能够系统地查询日期/时间值(而不是 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 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 此错误应由开发人员处理。

另请参阅