Aracılığıyla paylaş


sys.ledger_column_history (Transact-SQL)

Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri Azure SQL VeritabanıAzure SQL Yönetilen Örneği

Defter tablolarının sütunlarındaki kriptografik korumalı işlem geçmişini yakalar: sütunları ekleme, yeniden adlandırma ve çıkarma.

Veritabanı defteri hakkında daha fazla bilgi için bkz. Defter

Sütun adı Veri türü Description
object_id int Defter tablosunun nesne kimliği.
column_id int Defter tablosunda sütunun kimliği.
column_name sysname Defter tablosunda sütunun adı. Eğer işlem sütun adını değiştirdiyse, bu sütun yeni sütun adını yakalar.
operation_type tinyint İşlemin türünü gösteren sayısal değer

0 = CREATE – CREATE TABLE kullanarak sütunu içeren tabloyu oluştururken bir sütun oluşturmak.
1 = ADD – defter tablosuna ALTER TABLE/ADD kullanılarak bir sütun eklemek.
2 = RENAME - defter tablosunda bir sütunun yeniden adlandırılması.
3 = DROP - defter tablosunda bir sütun düşürmek.
operation_type_desc nvarchar(60) operation_type değerinin metinsel açıklaması.
transaction_id bigint Veritabanı için benzersiz bir işlem kimliği (veritabanı işlem günlüğündeki işlem kimliğine karşılık gelir).
sequence_number bigint İşlem içindeki işlemin dizisi numarası.

Permissions

DEFTER İÇERİĞİNİ GÖRÜNTÜLEME izni gerektirir.

Örnekler

Defter tablolarındaki aşağıdaki işlem dizisini ele alalım.

  1. Bir kullanıcı defter tablosu oluşturur.

    CREATE TABLE [Employees]
    (
        EmployeeID INT NOT NULL,
        Salary Money NOT NULL
    )
    WITH (SYSTEM_VERSIONING = ON, LEDGER = ON);
    GO
    
  2. Bir kullanıcı, defter tablosuna bir sütun ekler.

    ALTER TABLE [Employees] ADD Lastname NVARCHAR(256) NULL;
    
  3. Bir kullanıcı, defter tablosunun bir sütununu yeniden adlandırır.

    EXEC sp_rename 'dbo.Employees.Lastname', 'Firstname', 'COLUMN';
    
  4. Bir kullanıcı, defter tablosunun bir sütununu düşürür.

    ALTER TABLE [Employees] DROP COLUMN Firstname;
    

Aşağıdaki sorgu, sys.ledger_column_history ve sys.database_ledger_transactions birleştirerek defter tablosu sütunlarındaki değişikliklerin geçmişini, her değişikliğin ve değişikliğin zamanını ve tetikleyen kullanıcının adını üretmektedir.

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];

Ayrıca bakınız