sys.sp_cdc_get_captured_columns (Transact-SQL)

适用于:SQL Server

返回指定捕获实例所跟踪的捕获源列的变更数据捕获元数据信息。 更改数据捕获在 SQL Server 的每个版本中都不可用。 有关 SQL Server 各个版次支持的功能列表,请参阅 SQL Server 2022 的各个版次及其支持的功能

Transact-SQL 语法约定

语法

sys.sp_cdc_get_captured_columns
    [ @capture_instance = ] 'capture_instance'
[ ; ]

参数

[ @capture_instance = ] 'capture_instance'

与源表关联的捕获实例的名称。 @capture_instance为 sysname,不能为 NULL。

若要报告表的捕获实例,请运行 sys.sp_cdc_help_change_data_capture 存储过程。

返回代码值

0(成功)或 1(失败)。

结果集

列名称 数据类型 描述
source_schema sysname 源表架构的名称。
source_table sysname 源表的名称。
capture_instance sysname 捕获实例的名称。
column_name sysname 捕获的源列的名称。
column_id int 源表中的列 ID。
column_ordinal int 源表中列的位置。
data_type sysname 列数据类型。
character_maximum_length int 如果为基于字符的列,则为该列的最大字符长度;否则为 NULL。
numeric_precision tinyint 如果为基于数值的列,则为该列的精度;否则为 NULL。
numeric_precision_radix smallint 如果为基于数值的列,则为该列的精度基数;否则为 NULL。
numeric_scale int 如果为基于数值的列,则为该列的小数位数;否则为 NULL。
datetime_precision smallint 如果为基于日期时间的列,则为该列的精度;否则为 NULL。

注解

用于sys.sp_cdc_get_captured_columns获取有关通过查询捕获实例查询函数cdc.fn_cdc_get_all_changes_<capture_instance>cdc.fn_cdc_get_net_changes_<>capture_instance返回的捕获列的列信息。 在捕获实例的生命周期内,列名、ID 和位置保持不变。 当所跟踪表中的基础源列的数据类型发生更改时,只有列数据类型会更改。 添加到源表或从中删除的列对现有捕获实例的捕获列没有影响。

使用 sys.sp_cdc_get_ddl_history 获取应用于源表的数据定义语言(DDL)语句的相关信息。 任何修改所跟踪源列的结构的 DDL 更改都会在结果集中返回。

权限

要求具有 db_owner 固定数据库角色中的成员资格。 对于所有其他用户,要求对源表中的所有已捕获列具有 SELECT 权限;如果已定义捕获实例的访问控制角色,则还要求具有该数据库角色的成员身份。 当调用方无权查看源数据时,该函数将返回错误 22981 (Object doesn't exist or access is denied.)。

示例

下例返回有关 HumanResources_Employee 捕获实例中的捕获列的信息。

USE AdventureWorks2022;
GO

EXECUTE sys.sp_cdc_get_captured_columns
    @capture_instance = N'HumanResources_Employee';
GO