Compartilhar via


Criar e usar tabelas do razão somente de acréscimo

Aplica-se a: SQL Server 2022 (16.x) Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

Este artigo mostra como criar uma tabela do razão somente de acréscimo. Em seguida, você inserirá valores em sua tabela do razão somente de acréscimo e, em seguida, tentará fazer atualizações nos dados. Por fim, você exibirá os resultados usando o modo de exibição do razão. Usaremos um exemplo de um sistema de acesso de chave de cartão para um estabelecimento, que é um padrão de sistema somente de acréscimo. Nosso exemplo irá fornecer uma visão prática da relação entre a tabela do razão somente de acréscimo e a exibição do razão correspondente.

Para obter mais informações, consulte Tabelas do razão somente de acréscimo.

Pré-requisitos

Criar tabela do razão somente de acréscimo

Vamos criar uma tabela KeyCardEvents com o esquema a seguir.

Nome da coluna Tipo de dados Descrição
EmployeeID int A ID exclusiva do funcionário que está acessando o estabelecimento
AccessOperationDescription nvarchar(MAX) A operação de acesso do funcionário
Timestamp datetime2 A data e a hora em que o funcionário acessou o estabelecimento
  1. Use o SQL Server Management Studio ou o Azure Data Studio para criar um novo esquema e tabela chamados [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. Adicione um novo evento de acesso ao estabelecimento à tabela [AccessControl].[KeyCardEvents] com os valores a seguir.

    INSERT INTO [AccessControl].[KeyCardEvents]
    VALUES ('43869', 'Building42', '2020-05-02T19:58:47.1234567');
    
  3. Exiba o conteúdo da tabela KeyCardEvents, e especifique as colunas GENERATED ALWAYS que são adicionadas à tabela do razão somente de acréscimo.

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

    Captura de tela que mostra os resultados da consulta da tabela KeyCardEvents.

  4. Exiba o conteúdo da exibição do razão KeyCardEvents junto com o modo de exibição do sistema de transações do razão para identificar quem adicionou registros à tabela.

     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. Tente atualizar a tabela KeyCardEvents alterando o EmployeeID de 43869 para 34184.

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

    Você receberá uma mensagem de erro informando que as atualizações não são permitidas para sua tabela do razão somente de acréscimo.

    Captura de tela que mostra a mensagem de erro somente de acréscimo.

Permissões

A criação de tabelas do razão somente de acréscimo requer a permissão ENABLE LEDGER. Para obter mais informações sobre as permissões relacionadas às tabelas do razão, confira Permissões.