Créer et utiliser des tables de registre d’ajout uniquement

S’applique à : SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed Instance

Cet article explique comment créer une table de registre en ajout seul. Ensuite, vous allez insérer des valeurs dans votre table de registre d’ajout uniquement, puis tenter de mettre à jour les données. Enfin, vous visualiserez les résultats en utilisant l’affichage du registre. Nous allons utiliser l’exemple d’un système d’accès à une installation avec une clé de carte, qui est un modèle de système d’ajout uniquement. Notre exemple vous donne un aperçu pratique de la relation entre la table de registre d’ajout uniquement et la vue de registre correspondante.

Pour plus d’informations, consultez Tables de registre d’ajout uniquement.

Prérequis

Créer une table de registre d’ajout uniquement

Nous créons une table KeyCardEvents avec le schéma suivant.

Nom de la colonne Type de données Description
EmployeeID int ID unique de l’employé qui accède au bâtiment
AccessOperationDescription nvarchar (MAX) Opération d’accès de l’employé
Horodateur datetime2 Date et heure auxquelles l’employé a accédé au bâtiment
  1. Utilisez SQL Server Management Studio ou Azure Data Studio pour créer un schéma et une table appelés [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. Ajoutez un nouvel événement d’accès au bâtiment dans la table [AccessControl].[KeyCardEvents] avec les valeurs suivantes.

    INSERT INTO [AccessControl].[KeyCardEvents]
    VALUES ('43869', 'Building42', '2020-05-02T19:58:47.1234567');
    
  3. Consultez le contenu de votre table KeyCardEvents et spécifiez les colonnes GENERATED ALWAYS qui sont ajoutées à votre table de registre d’ajout uniquement.

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

    Screenshot that shows results from querying the KeyCardEvents table.

  4. Affichez le contenu de votre vue de registre KeyCardEvents ainsi que la vue système des transactions de registre pour identifier qui a ajouté des enregistrements à la table.

     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. Essayez de mettre à jour la table KeyCardEvents en remplaçant la valeur EmployeeID43869 par 34184.

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

    Vous recevrez un message d’erreur indiquant que les mises à jour ne sont pas autorisées pour votre table de registre d’ajout uniquement.

    Screenshot that shows the append-only error message.

Autorisations

La création de tables de registre d’ajout uniquement nécessite l’autorisation ENABLE LEDGER . Pour plus d’informations sur les autorisations associées aux tables du registre, consultez Autorisations.