sys.sp_cdc_get_ddl_history (Transact-SQL)

适用于:SQL Server

返回自对指定的捕获实例启用变更数据捕获后与该捕获实例关联的数据定义语言 (DDL) 更改历史记录。 更改数据捕获在 SQL Server 的每个版本中都不可用。 有关 SQL Server 各个版次支持的功能列表,请参阅 SQL Server 2022 的各个版次及其支持的功能

Transact-SQL 语法约定

语法

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

参数

[ @capture_instance = ] 'capture_instance'

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

返回代码值

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

结果集

列名称 数据类型 描述
source_schema sysname 源表架构的名称。
source_table sysname 源表的名称。
capture_instance sysname 捕获实例的名称。
required_column_update bit 表示 DDL 更改要求对更改表中的列进行更改以反映对源列所做的数据类型更改。
ddl_command nvarchar(max) 应用到源表的 DDL 语句。
ddl_lsn binary(10) 与 DDL 更改关联的日志序列号 (LSN)。
ddl_time datetime 与 DDL 更改关联的时间。

注解

对更改源表列结构的源表的 DDL 修改(例如添加或删除列或更改现有列的数据类型)保留在 cdc.ddl_history 表中。 您可使用此存储过程报告以上更改。 捕获 cdc.ddl_history 进程在日志中读取 DDL 事务时输入。

权限

要求db_owner固定数据库角色的成员身份才能返回数据库中所有捕获实例的行。 对于所有其他用户,要求对源表中的所有已捕获列具有 SELECT 权限;如果已定义捕获实例的访问控制角色,则还要求具有该数据库角色的成员身份。

示例

以下示例将列添加到源表 HumanResources.Employee 中,然后运行 sys.sp_cdc_get_ddl_history 存储过程来报告应用到与捕获实例 HumanResources_Employee 关联的源表的 DDL 更改。

USE AdventureWorks2022;
GO

ALTER TABLE HumanResources.Employee
ADD Test_Column INT NULL;
GO

-- Pause 10 seconds to allow the event to be logged.
WAITFOR DELAY '00:00:10';
GO

EXECUTE sys.sp_cdc_get_ddl_history
    @capture_instance = 'HumanResources_Employee';
GO