追加専用のテーブルを作成して使用する

適用対象: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed Instance

この記事では、追加専用の台帳テーブルを作成する方法を示します。 次に、追加専用の台帳テーブルに値を挿入した後、データを更新してみます。 最後に、台帳ビューを使用して結果を表示します。 ここでは、ある施設のカード キー アクセス システムの例を使用します。これは、追加専用システムのパターンです。 この例では、追加専用の台帳テーブルとそれに対応する台帳ビューのリレーションシップを実際に見てみましょう。

詳細については、追加専用の台帳テーブルに関するページを参照してください。

前提条件

追加専用の台帳テーブルを作成する

次のスキーマを持つ KeyCardEvents テーブルを作成します。

列名 データ型 説明
EmployeeID int 建物にアクセスする従業員の一意の ID
AccessOperationDescription nvarchar (MAX) 従業員のアクセス操作
タイムスタンプ datetime2 従業員が建物にアクセスした日時
  1. 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));
    
  2. 次の値を使用して、建物への新しいアクセス イベントを [AccessControl].[KeyCardEvents] テーブルに追加します。

    INSERT INTO [AccessControl].[KeyCardEvents]
    VALUES ('43869', 'Building42', '2020-05-02T19:58:47.1234567');
    
  3. KeyCardEvents テーブルの内容を表示し、追加専用の台帳テーブルに追加された GENERATED ALWAYS 列を指定します。

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

    Screenshot that shows results from querying the KeyCardEvents table.

  4. 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;
    
  5. EmployeeID43869 から 34184. に変更して、KeyCardEvents テーブルの更新を試みる

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

    追加専用台帳テーブルに対する更新が許可されていないことを示すエラー メッセージが表示されます。

    Screenshot that shows the append-only error message.

アクセス許可

追記のみの元帳テーブルを作成するにはENABLE LEDGERアクセス許可が必要です。 台帳テーブルに関連する権限の詳細については、権限に関する記事を参照してください。