Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо к: SQL Server 2022 (16.x) и более поздних версий
База данных Azure SQL
Управляемый экземпляр Azure SQL
В этой статье показано, как создать таблицу реестра только для добавления. После этого вы вставите значения в таблицу реестра только для добавления и попробуете внести изменения в эти данные. Наконец, можно просмотреть результаты с помощью представления реестра. Мы будем использовать пример системы доступа к объекту с помощью ключ-карты, то есть реализуем шаблон системы только для добавления данных. Наш пример поможет практически представить связи между таблицей реестра только для добавления данных и соответствующим представлением реестра.
Дополнительные сведения, см. в статье Таблицы реестра только для добавления данных.
Необходимые компоненты
Создание таблиц реестра только для добавления данных
Мы создадим таблицу KeyCardEvents по следующей схеме.
| Имя столбца | Тип данных | Description |
|---|---|---|
| EmployeeID | INT | Уникальный идентификатор сотрудника, который входит в здание. |
| AccessOperationDescription | nvarchar(MAX) | Операция доступа для сотрудника. |
| Метка времени | datetime2 | Дата и время получения сотрудником доступа в здание |
Используйте SQL Server Management Studio, чтобы создать новую схему и таблицу
[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));Добавьте в таблицу
[AccessControl].[KeyCardEvents]новое событие входа в здание со следующими значениями.INSERT INTO [AccessControl].[KeyCardEvents] VALUES ('43869', 'Building42', '2020-05-02T19:58:47.1234567');Просмотрите содержимое таблицы KeyCardEvents, указав столбцы GENERATED ALWAYS, добавленные в таблицу реестра только для добавления данных.
SELECT * ,[ledger_start_transaction_id] ,[ledger_start_sequence_number] FROM [AccessControl].[KeyCardEvents];Просмотрите содержимое представления реестра KeyCardEvents вместе с системным представлением транзакций реестра, чтобы определить, кто добавил записи в таблицу.
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;Попытайтесь обновить таблицу
KeyCardEvents, изменивEmployeeIDс43869на34184.UPDATE [AccessControl].[KeyCardEvents] SET [EmployeeID] = 34184;Отобразится ошибка с сообщением о том, что обновления таблицы реестра только для добавления данных не разрешены.
Разрешения
Для создания таблиц реестра только для добавления требуется ENABLE LEDGER разрешение. Подробные сведения о разрешениях, связанных с таблицами реестра, см. в разделе Разрешения.