Creare e usare tabelle del libro mastro append-only

Si applica a: SQL Server 2022 (16.x) e versioni successive Database SQL di AzureIstanza gestita di SQL di Azure

Questo articolo spiega come creare una tabella ledger di sola aggiunta. Successivamente, inserirai dei valori nella tabella ledger di solo inserimento e tenterai quindi di aggiornare i dati. Infine, visualizzerai i risultati utilizzando la vista Registro. Verrà usato un esempio di sistema di accesso con scheda chiave per una struttura, che è un modello di sistema di solo accodamento. Il nostro esempio mostrerà in modo pratico la relazione tra la tabella ledger di sola aggiunta e la vista ledger corrispondente.

Per altre informazioni, vedere tabelle ledger di sola aggiunta.

Prerequisiti

Creare una tabella di registro di sola aggiunta

Verrà creata una KeyCardEvents tabella con lo schema seguente.

Nome colonna Tipo di dati Descrizione
EmployeeID int ID univoco del dipendente che accede all'edificio
AccessOperationDescription nvarchar (MAX) L'operazione di accesso del dipendente
Data e ora datetime2 Data e ora in cui il dipendente ha eseguito l'accesso all'edificio
  1. Usare SQL Server Management Studio per creare un nuovo schema e una nuova tabella denominata [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. Aggiungere un nuovo evento di accesso all’edificio nella tabella [AccessControl].[KeyCardEvents] con i valori seguenti.

    INSERT INTO [AccessControl].[KeyCardEvents]
    VALUES ('43869', 'Building42', '2020-05-02T19:58:47.1234567');
    
  3. Visualizza il contenuto della tabella KeyCardEvents e specifica le colonne GENERATED ALWAYS aggiunte alla tua tabella ledger di sola aggiunta.

    SELECT *
         ,[ledger_start_transaction_id]
         ,[ledger_start_sequence_number]
    FROM [AccessControl].[KeyCardEvents];
    
  4. Visualizza il contenuto della vista del registro KeyCardEvents insieme alla vista di sistema delle transazioni del registro per identificare chi ha aggiunto record alla tabella.

     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. Provare ad aggiornare la tabella KeyCardEvents modificando EmployeeID da 43869 a 34184.

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

    Verrà visualizzato un messaggio di errore che indica che gli aggiornamenti non sono consentiti per la tabella ledger di sola aggiunta.

    Schermata che mostra il messaggio di errore relativo alla modalità di sola aggiunta.

Autorizzazioni

La creazione di tabelle ledger di sola aggiunta richiede l'autorizzazione ENABLE LEDGER. Per altre informazioni sulle autorizzazioni riguardanti le tabelle del libro mastro, vedere Autorizzazioni.