sys.sp_cdc_get_ddl_history (Transact-SQL)
适用于:SQL Server
返回自对指定的捕获实例启用变更数据捕获后与该捕获实例关联的数据定义语言 (DDL) 更改历史记录。 并非在 Microsoft SQL Server 的每个版本中均提供变更数据捕获功能。 有关 SQL Server各版本支持的功能列表,请参阅 SQL Server 2016 各个版本支持的功能。
语法
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 表中。 您可使用此存储过程报告以上更改。 当捕获进程读取日志中的 DDL 事务时,将向 cdc.ddl_history 中添加项。
权限
要求拥有 db_owner 固定数据库角色的成员身份以返回针对数据库中所有捕获实例的行。 对于所有其他用户,要求对源表中的所有已捕获列具有 SELECT 权限;如果已定义捕获实例的访问控制角色,则还要求具有该数据库角色的成员身份。
示例
以下示例将列添加到源表 HumanResources.Employee
中,然后运行 sys.sp_cdc_get_ddl_history
存储过程来报告应用到与捕获实例 HumanResources_Employee
关联的源表的 DDL 更改。
USE AdventureWorks2012;
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