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 权限。
示例
请考虑以下对账本表执行操作的序列。
用户创建账本表。
CREATE TABLE [Employees] ( EmployeeID INT NOT NULL, Salary Money NOT NULL ) WITH (SYSTEM_VERSIONING = ON, LEDGER = ON); GO
用户重命名账本表。
EXEC sp_rename 'Employees', 'Employees_Copy';
用户重命名账本表的账本视图。
EXEC sp_rename 'Employees_Ledger', 'Employees_Ledger_Copy';
用户删除账本表。
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