Partilhar via


Criar e usar tabelas contábeis somente de acréscimo

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores Azure SQL DatabaseAzure SQL Managed Instance

Este artigo mostra como criar uma tabela contábil somente acréscimo. Em seguida, você irá inserir valores na sua tabela de registo apenas acréscimo e depois tentar atualizar os dados. Finalmente, você visualizará os resultados usando a visualização contábil. Usaremos um exemplo de um sistema de acesso por cartão para uma instalação, que é um padrão de sistema apenas aditivo. Nosso exemplo lhe dará uma visão prática da relação entre a tabela contábil somente de acréscimo e sua visualização contábil correspondente.

Para obter mais informações, consulte Tabelas contábeis somente de acréscimo.

Pré-requisitos

Criar uma tabela contábil somente acréscimo

Criaremos uma KeyCardEvents tabela com o esquema a seguir.

Nome da coluna Tipo de dados Description
ID do funcionário int O ID único do funcionário que acede ao edifício
DescriçãoDeOperaçãoDeAcesso nvarchar (MÁX) A operação de acesso do colaborador
Data e Hora datetime2 A data e a hora em que o funcionário acedeu ao edifício
  1. Use o SQL Server Management Studio para criar um novo esquema e uma nova 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 edifício na [AccessControl].[KeyCardEvents] tabela com os seguintes valores.

    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 à sua tabela contábil somente de acréscimo.

    SELECT *
         ,[ledger_start_transaction_id]
         ,[ledger_start_sequence_number]
    FROM [AccessControl].[KeyCardEvents];
    
  4. Exiba o conteúdo da visualização do livro-razão KeyCardEvents juntamente com a visualização do sistema de transações contábeis 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 KeyCardEvents tabela 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 contábil somente para acréscimos.

    Captura de ecrã que mostra a mensagem de erro somente adição.

Permissions

A criação de tabelas contábeis somente de acréscimo requer a ENABLE LEDGER permissão. Para obter mais informações sobre permissões relacionadas a tabelas contábeis, consulte Permissões.