システム バージョン管理されたテンポラル テーブルのスキーマを変更する
適用対象: SQL Server 2016 (13.x) 以降 Azure SQL DatabaseAzure SQL Managed Instance
ステートメントを ALTER TABLE
使用して、列を追加、変更、または削除します。
使用例
ここでは、テンポラル テーブルのスキーマを変更する例をいくつか示します。
ALTER TABLE dbo.Department
ALTER COLUMN DeptName varchar(100);
ALTER TABLE dbo.Department
ADD WebAddress nvarchar(255) NOT NULL
CONSTRAINT DF_WebAddress DEFAULT 'www.mycompany.com';
ALTER TABLE dbo.Department
ADD TempColumn INT;
GO
ALTER TABLE dbo.Department
DROP COLUMN TempColumn;
/* Setting IsHidden property for period columns.
Use ALTER COLUMN <period_column> DROP HIDDEN to clear IsHidden flag */
ALTER TABLE dbo.Department
ALTER COLUMN ValidFrom ADD HIDDEN;
ALTER TABLE dbo.Department
ALTER COLUMN ValidTo ADD HIDDEN;
重要な解説
テンポラル テーブルのスキーマを変更するには、現在のテーブルおよび履歴テーブルのCONTROL 権限が必要です。
操作中、
ALTER TABLE
システムは両方のテーブルに対してスキーマ ロックを保持します。指定したスキーマ変更は、適切に (変更の種類に応じて) 履歴テーブルに反映されます。
varchar(max)、nvarchar(max)、varbinary(max) または既定値を含む XML 列を追加すると、SQL Server のすべてのエディションで、データ更新操作となります。
列の追加後の行サイズが行サイズの制限を超えた場合、新しい列をオンラインで追加することはできません。
新しい NOT NULL の列でテーブルを拡張すると、テーブルのすべての列がシステムから自動的に生成されるため、履歴テーブルの既定の制約が削除されることを考慮してください。
オンライン オプション (
WITH (ONLINE = ON
) は、システム バージョン管理されたテンポラル テーブルには影響ALTER TABLE ALTER COLUMN
しません。 ALTER 列は、ONLINE オプションに指定された値に関係なく、オンラインとして実行されません。を使用
ALTER COLUMN
して、期間列のプロパティを変更IsHidden
できます。次のスキーマの変更に直接
ALTER
を使用することはできません。 これらの種類の変更については、 を設定SYSTEM_VERSIONING = OFF
します。- 計算列を追加する
- IDENTITY 列を追加する
- 履歴テーブルが または
DATA_COMPRESSION = ROW
に設定されている場合、SPARSE 列を追加するか、既存の列を SPARSE にDATA_COMPRESSION = PAGE
変更します。これは履歴テーブルの既定値です。 - COLUMN_SETを追加する
- ROWGUIDCOL 列を追加する、または既存の列を ROWGUIDCOLに変更する
- 現在のテーブルまたは履歴テーブルの列に null 値が含まれている場合に NULL 列を NOT NULL に変更する
次の例では、設定 SYSTEM_VERSIONING = OFF
がまだ必要なスキーマを変更する ( IDENTITY 列を追加する) 方法を示します。 この例では、データの整合性チェックを無効にしています。 同時実行データの変更が発生しないときに、トランザクション内でスキーマ変更が行われる場合、このチェックは必要ありません。
BEGIN TRANSACTION
ALTER TABLE [dbo].[CompanyLocation] SET (SYSTEM_VERSIONING = OFF);
ALTER TABLE [CompanyLocation] ADD Cntr INT IDENTITY (1, 1);
ALTER TABLE [dbo].[CompanyLocationHistory] ADD Cntr INT NOT NULL
CONSTRAINT DF_Cntr DEFAULT 0;
ALTER TABLE [dbo].[CompanyLocation] SET
(
SYSTEM_VERSIONING = ON
(HISTORY_TABLE = [dbo].[CompanyLocationHistory])
);
COMMIT;
次のステップ
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示