sys.ledger_table_history (Transact-SQL)

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

捕获对账本表执行操作的加密保护历史记录:创建账本表、重命名账本表或账本视图以及删除账本表。

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

列名称 数据类型 说明
object_id int 账本表的对象 ID。
schema_name sysname 包含账本表的架构的名称。 如果操作更改了架构名称,此列将捕获新的架构名称。
table_name sysname 账本表的名称。 如果操作更改了表名称,此列将捕获新的表名称。
ledger_view_schema_name sysname 包含账本表账本视图的架构的名称。 如果操作更改了架构名称,此列将捕获新的架构名称。
ledger_view_name sysname 账本表的账本视图的名称。 如果操作更改了视图名称,此列将捕获新的视图名称。
operation_type tinyint 指示操作类型的数值

0 = CREATE - 创建账本表。
1 = DROP - 删除账本表。
2 = RENAME - 重命名账本表。
3 = RENAME_VIEW - 重命名账本表的账本视图。
operation_type_desc nvarchar(60) operation_type 值的文本说明。
transaction_id bigint 包含账本表中操作的 ID 的事务。 它标识 sys.database_ledger_transactions 中的行。
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. 用户重命名账本表。

    EXEC sp_rename 'Employees', 'Employees_Copy';
    
  3. 用户重命名账本表的账本视图。

    EXEC sp_rename 'Employees_Ledger', 'Employees_Ledger_Copy';
    
  4. 用户删除账本表。

    DROP TABLE [Employees];
    

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

SELECT 
t.[principal_name]
, t.[commit_time]
, h.[schema_name] + '.' + h.[table_name] AS [table_name]
, h.[ledger_view_schema_name] + '.' + h.[ledger_view_name] AS [view_name]
, h.[operation_type_desc]
FROM sys.ledger_table_history h
JOIN sys.database_ledger_transactions t
ON h.transaction_id = t.transaction_id

另请参阅