追加専用のテーブルを作成して使用する
適用対象: SQL Server 2022 (16.x) Azure SQL データベース Azure SQL Managed Instance
この記事では、追加専用の台帳テーブルを作成する方法を示します。 次に、追加専用の台帳テーブルに値を挿入した後、データを更新してみます。 最後に、台帳ビューを使用して結果を表示します。 ここでは、ある施設のカード キー アクセス システムの例を使用します。これは、追加専用システムのパターンです。 この例では、追加専用の台帳テーブルとそれに対応する台帳ビューのリレーションシップを実際に見てみましょう。
詳細については、追加専用の台帳テーブルに関するページを参照してください。
前提条件
追加専用の台帳テーブルを作成する
次のスキーマを持つ KeyCardEvents
テーブルを作成します。
列名 | データ型 | 説明 |
---|---|---|
EmployeeID | int | 建物にアクセスする従業員の一意の ID |
AccessOperationDescription | nvarchar (MAX) | 従業員のアクセス操作 |
タイムスタンプ | datetime2 | 従業員が建物にアクセスした日時 |
SQL Server Management Studio または Azure Data 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;
EmployeeID
を43869
から34184.
に変更して、KeyCardEvents
テーブルの更新を試みるUPDATE [AccessControl].[KeyCardEvents] SET [EmployeeID] = 34184;
追加専用台帳テーブルに対する更新が許可されていないことを示すエラー メッセージが表示されます。
アクセス許可
追記のみの元帳テーブルを作成するにはENABLE LEDGER
アクセス許可が必要です。 台帳テーブルに関連する権限の詳細については、権限に関する記事を参照してください。