Créer et utiliser des tables de registre d’ajout uniquement
S’applique à : SQL Server 2022 (16.x)base de données Azure SQL Azure SQL Managed Instance
Cet article explique comment créer une table de registre en ajout seul. Ensuite, vous allez insérer des valeurs dans votre table de registre d’ajout uniquement, puis tenter de mettre à jour les données. Enfin, vous visualiserez les résultats en utilisant l’affichage du registre. Nous allons utiliser l’exemple d’un système d’accès à une installation avec une clé de carte, qui est un modèle de système d’ajout uniquement. Notre exemple vous donne un aperçu pratique de la relation entre la table de registre d’ajout uniquement et la vue de registre correspondante.
Pour plus d’informations, consultez Tables de registre d’ajout uniquement.
Prérequis
Créer une table de registre d’ajout uniquement
Nous créons une table KeyCardEvents
avec le schéma suivant.
Nom de la colonne | Type de données | Description |
---|---|---|
EmployeeID | int | ID unique de l’employé qui accède au bâtiment |
AccessOperationDescription | nvarchar (MAX) | Opération d’accès de l’employé |
Timestamp | datetime2 | Date et heure auxquelles l’employé a accédé au bâtiment |
Utilisez SQL Server Management Studio ou Azure Data Studio pour créer un schéma et une table appelés
[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));
Ajoutez un nouvel événement d’accès au bâtiment dans la table
[AccessControl].[KeyCardEvents]
avec les valeurs suivantes.INSERT INTO [AccessControl].[KeyCardEvents] VALUES ('43869', 'Building42', '2020-05-02T19:58:47.1234567');
Consultez le contenu de votre table KeyCardEvents et spécifiez les colonnes GENERATED ALWAYS qui sont ajoutées à votre table de registre d’ajout uniquement.
SELECT * ,[ledger_start_transaction_id] ,[ledger_start_sequence_number] FROM [AccessControl].[KeyCardEvents];
Affichez le contenu de votre vue de registre KeyCardEvents ainsi que la vue système des transactions de registre pour identifier qui a ajouté des enregistrements à la table.
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;
Essayez de mettre à jour la table
KeyCardEvents
en remplaçant la valeurEmployeeID
43869
par34184.
UPDATE [AccessControl].[KeyCardEvents] SET [EmployeeID] = 34184;
Vous recevrez un message d’erreur indiquant que les mises à jour ne sont pas autorisées pour votre table de registre d’ajout uniquement.
autorisations
La création de tables de registre d’ajout uniquement nécessite l’autorisation ENABLE LEDGER
. Pour plus d’informations sur les autorisations associées aux tables du registre, consultez Autorisations.