Creación y uso de tablas de solo adición del libro de contabilidad

Se aplica a: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed Instance

En este artículo se muestra cómo crear una tabla de libro de contabilidad de solo anexión. Luego, insertará valores en la tabla de libro de contabilidad de solo anexión e intentará realizar actualizaciones de los datos. Por último, verá los resultados mediante la vista de libro de contabilidad. Se usará un ejemplo de un sistema de acceso con clave de tarjeta de una instalación, que es un modelo de sistema de solo anexión. Este ejemplo le proporcionará una visión práctica de la relación entre la tabla de libro de contabilidad de solo anexión y su vista de libro de contabilidad correspondiente.

Para más información, consulte Tablas de libro de contabilidad de solo anexión.

Requisitos previos

Creación de tablas de libro de contabilidad de solo anexión

Crearemos una tabla KeyCardEvents con el esquema siguiente.

Nombre de la columna Tipo de datos Descripción
EmployeeID (Id. de empleado) int Identificador único del empleado que accede al edificio.
AccessOperationDescription nvarchar (MAX) Operación de acceso del empleado.
Marca de tiempo datetime2 Fecha y hora en que el empleado ha accedido al edificio.
  1. Use SQL Server Management Studio o Azure Data Studio para crear un esquema y una tabla denominados [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. Agregue un nuevo evento de acceso al edificio en la tabla [AccessControl].[KeyCardEvents] con los valores siguientes.

    INSERT INTO [AccessControl].[KeyCardEvents]
    VALUES ('43869', 'Building42', '2020-05-02T19:58:47.1234567');
    
  3. Vea el contenido de la tabla KeyCardEvents y especifique las columnas GENERATED ALWAYS que se agregan a la tabla de libro de contabilidad de solo anexión.

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

    Screenshot that shows results from querying the KeyCardEvents table.

  4. Examine el contenido de la vista de libro de contabilidad keyCardEvents junto con la vista del sistema de transacciones del libro de contabilidad para identificar quién agregó registros a la tabla.

     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. Intente actualizar la tabla KeyCardEvents cambiando EmployeeID de 43869 a 34184..

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

    Recibirá un mensaje de error que indica que no están permitidas las actualizaciones para la tabla de libro de contabilidad de solo anexión.

    Screenshot that shows the append-only error message.

Permisos

Para crear tablas de libro de contabilidad de solo anexión se necesita el permiso ENABLE LEDGER. Para más información sobre los permisos relacionados con las tablas de libro de contabilidad, consulte Permisos.