Criar e usar tabelas de livro-razão apenas de acréscimo

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores Banco de Dados SQL do AzureInstância Gerenciada de SQL do Azure

Este artigo mostra como você pode criar uma tabela de razão somente acréscimo. Em seguida, você inserirá valores em sua tabela de livro-razão somente anexável e, então, tentará atualizar os dados. Por fim, você exibirá os resultados usando o modo de exibição do razão. Usaremos um exemplo de sistema de controle de acesso por cartão para uma instalação, que é um padrão de sistema somente de anexação. Nosso exemplo oferecerá uma visão prática da relação entre a tabela de livro-razão somente acréscimo e sua visão de livro-razão correspondente.

Para obter mais informações, consulte Tabelas de apenas acréscimo.

Pré-requisitos

Criar tabela de livro-razão de apenas acréscimo

Vamos criar uma tabela KeyCardEvents com o esquema a seguir.

Nome da coluna Tipo de dados Descrição
ID do funcionário int A ID exclusiva do funcionário que está acessando o estabelecimento
Descrição da operação de acesso 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 para criar um novo esquema e uma tabela chamada [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. Visualize o conteúdo da sua tabela KeyCardEvents e especifique as colunas GENERATED ALWAYS que são adicionadas à sua tabela de razão somente de acréscimo.

    SELECT *
         ,[ledger_start_transaction_id]
         ,[ledger_start_sequence_number]
    FROM [AccessControl].[KeyCardEvents];
    
  4. Visualize o conteúdo da visualização do razão KeyCardEvents junto com a visualização do sistema de transações do razão para identificar quem inseriu registros na 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 de razão somente anexável.

    Captura de tela que mostra a mensagem de erro de apenas anexação.

Permissões

A criação de tabelas de razão apenas 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.