Erstellen und Verwenden von Ledgertabellen, die nur Anfügevorgänge unterstützen

Gilt für: SQL Server 2022 (16.x) Azure SQL-DatenbankAzure SQL Managed Instance

In diesem Artikel erfahren Sie, wie Sie eine Ledgertabelle erstellen, die nur Anfügevorgänge unterstützt. Als Nächstes fügen Sie Werte in die Ledgertabelle, die nur Anfügevorgänge unterstützt, ein. Danach versuchen Sie, die Daten zu aktualisieren. Schließlich zeigen Sie die Ergebnisse unter Verwendung der Ledgeransicht an. Wir verwenden ein Beispiel für ein Kartenschlüsselzugangssystem für eine Einrichtung, das ein Nur-Anfügen-Systemmuster ist. In diesem Beispiel erhalten Sie einen praxisnahen Blick auf die Beziehung zwischen der Ledgertabelle, die nur Anfügevorgänge unterstützt, und der entsprechenden Ledgeransicht.

Weitere Informationen finden Sie unter Ledgertabellen, die nur Anfügevorgänge unterstützen.

Voraussetzungen

Erstellen einer Ledgertabelle, die nur Anfügevorgänge unterstützt

Wir erstellen eine KeyCardEvents-Tabelle mit dem folgenden Schema.

Spaltenname Datentyp Beschreibung
EmployeeID INT Die eindeutige ID des Mitarbeiters, der in das Gebäude eintritt
AccessOperationDescription nvarchar (MAX) Der Zugangsvorgang des Mitarbeiters
Timestamp datetime2 Das Datum und die Uhrzeit, an dem bzw. zu der der Mitarbeiter auf das Gebäude zugegriffen hat
  1. Erstellen Sie in SQL Server Management Studio oder Azure Data Studio ein neues Schema und die neue Tabelle namens [AccessControl].[KeyCardEvents].

    CREATE SCHEMA [AccessControl];
    GO
    CREATE TABLE [AccessControl].[KeyCardEvents]
       (
          [EmployeeID] INT NOT NULL,
          [AccessOperationDescription] NVARCHAR (1024) NOT NULL,
          [Timestamp] Datetime2 NOT NULL
       )
       WITH (LEDGER = ON (APPEND_ONLY = ON));
    
  2. Fügen Sie in der Tabelle [AccessControl].[KeyCardEvents] ein neues Gebäudezugangsereignis mit den folgenden Werten hinzu.

    INSERT INTO [AccessControl].[KeyCardEvents]
    VALUES ('43869', 'Building42', '2020-05-02T19:58:47.1234567');
    
  3. Zeigen Sie den Inhalt Ihrer KeyCardEvents-Tabelle an, und geben Sie die Spalten GENERATED ALWAYS an, die Ihrer Ledgertabelle, die nur Anfügevorgänge unterstützt, hinzugefügt werden.

    SELECT *
         ,[ledger_start_transaction_id]
         ,[ledger_start_sequence_number]
    FROM [AccessControl].[KeyCardEvents];
    

    Screenshot that shows results from querying the KeyCardEvents table.

  4. Zeigen Sie den Inhalt Ihrer KeyCardEvents-Ledgersicht zusammen mit der Systemsicht für Ledgertransaktionen an, um zu ermitteln, wer der Tabelle Datensätze hinzugefügt hat.

     SELECT
     t.[commit_time] AS [CommitTime] 
     , t.[principal_name] AS [UserName]
     , l.[EmployeeID]
     , l.[AccessOperationDescription]
     , l.[Timestamp]
     , l.[ledger_operation_type_desc] AS Operation
     FROM [AccessControl].[KeyCardEvents_Ledger] l
     JOIN sys.database_ledger_transactions t
     ON t.transaction_id = l.ledger_transaction_id
     ORDER BY t.commit_time DESC;
    
  5. Versuchen Sie, die KeyCardEvents-Tabelle zu aktualisieren, indem Sie EmployeeID von 43869 in 34184.ändern.

    UPDATE [AccessControl].[KeyCardEvents] SET [EmployeeID] = 34184;
    

    Sie erhalten eine Fehlermeldung mit dem Hinweis, dass Aktualisierungen für die Ledgertabelle, die nur Anfügevorgänge unterstützt, nicht zulässig sind.

    Screenshot that shows the append-only error message.

Berechtigungen

Zum Erstellen von Nur-Anfüge-Hauptbuchtabellen ist die ENABLE LEDGER Berechtigung erforderlich. Weitere Informationen zu Berechtigungen im Zusammenhang mit Ledgertabellen finden Sie unter Berechtigungen.