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 权限。
示例
请考虑以下对账本表执行操作的序列。
用户创建账本表。
CREATE TABLE [Employees] ( EmployeeID INT NOT NULL, Salary Money NOT NULL ) WITH (SYSTEM_VERSIONING = ON, LEDGER = ON); GO
用户向账本表添加列。
ALTER TABLE [Employees] ADD Lastname NVARCHAR(256) NULL;
用户重命名账本表中的列。
EXEC sp_rename 'dbo.Employees.Lastname', 'Firstname', 'COLUMN';
用户删除账本表中的列。
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];