sys.ledger_column_history (Transact-SQL)

适用于: SQL Server 2022 (16.x) Azure SQL 数据库Azure SQL 托管实例

捕获对账本表列操作的加密保护历史记录:添加、重命名和删除列。

有关数据库账本的详细信息,请参阅账本

列名称 数据类型 说明
object_id int 账本表的对象 ID。
column_id int 账本表中的列 ID。
column_name sysname 账本表中列的名称。 如果操作更改了列名称,此列将捕获新的列名称。
operation_type tinyint 指示操作类型的数值

0 = CREATE – 在使用 CREATE TABLE 创建包含列的表中创建一个列。
1 = ADD – 使用 ALTER TABLE/ADD COLUMN 在账本表中添加列。
2 = RENAME - 重命名账本表中的列。
3 = DROP - 删除账本表中的列。
operation_type_desc nvarchar(60) operation_type 值的文本说明。
transaction_id bigint 数据库唯一的事务 ID(它对应于数据库事务日志中的事务 ID)。
sequence_number bigint 事务中操作的序列号。

权限

需要 VIEW LEDGER CONTENT 权限。

示例

请考虑以下对账本表执行操作的序列。

  1. 用户创建账本表。

    CREATE TABLE [Employees]
    (
        EmployeeID INT NOT NULL,
        Salary Money NOT NULL
    )
    WITH (SYSTEM_VERSIONING = ON, LEDGER = ON);
    GO
    
  2. 用户向账本表添加列。

    ALTER TABLE [Employees] ADD Lastname NVARCHAR(256) NULL;
    
  3. 用户重命名账本表中的列。

    EXEC sp_rename 'dbo.Employees.Lastname', 'Firstname', 'COLUMN';
    
  4. 用户删除账本表中的列。

    ALTER TABLE [Employees] DROP COLUMN Firstname;
    

以下查询联接 sys.ledger_column_history 和 sys.database_ledger_transactions,以生成账本表列更改的历史记录,包括每次更改的时间以及触发更改的用户的名称。

SELECT 
t.[principal_name]
, t.[commit_time]
, h.[column_name] AS [column_name]
, h.[operation_type_desc]
FROM sys.ledger_column_history h
JOIN sys.database_ledger_transactions t
ON h.transaction_id = t.transaction_id
ORDER BY t.[commit_time];

另请参阅