變更系統版本設定時態表的結構描述

適用於:SQL Server 2016 (13.x) 和更新版本 Azure SQL 資料庫 Azure SQL 受控執行個體

使用 ALTER TABLE 陳述式新增、改變或移除資料行。

備註

變更時態表結構描述,需要目前和歷程記錄資料表上的 CONTROL 權限。

ALTER TABLE 作業期間,系統會保留這兩個資料表的結構描述鎖定。

指定的結構描述變更會以適當的方式 (視變更的類型而定) 傳播至記錄資料表。

新增 varchar(max)nvarchar(max)varbinary(max) 或含有預設值的 XML 資料行,將是所有 SQL Server 版本的更新資料作業。

如果加入資料行之後的資料列大小超過資料列大小限制,則無法線上加入新的資料行。

使用新的 NOT NULL 資料行擴充資料表之後,請考慮捨棄歷程記錄資料表的預設條件約束,因為系統會自動填入該資料表中的所有資料行。

線上選項 (WITH (ONLINE = ON) 並不會影響具有時態表的 ALTER TABLE ALTER COLUMN。 因為不論 ONLINE 選項指定的值為何,ALTER 資料行都不會以連線方式執行。

您可以使用 ALTER COLUMN 以變更期間資料行的 IsHidden 屬性。

您不能使用直接 ALTER 進行下列結構描述變更。 針對這些類型的變更,請設定 SYSTEM_VERSIONING = OFF

  • 加入計算資料行
  • 新增 IDENTITY 資料行
  • 將歷程記錄資料表設定為 DATA_COMPRESSION = PAGEDATA_COMPRESSION = ROW (歷程記錄資料表的預設值) 時,新增 SPARSE 資料行或將現有資料行變更為 SPARSE
  • 新增 COLUMN_SET
  • 新增 ROWGUIDCOL 資料行或將現有資料行變更為 ROWGUIDCOL
  • 如果資料行在目前或歷程記錄資料表中包含 Null 值,則會將 NULL 資料行變更為 NOT NULL

範例

A. 變更時態表的結構描述

以下是變更時態表結構描述的一些範例。

ALTER TABLE dbo.Department
    ALTER COLUMN DeptName varchar(100);

ALTER TABLE dbo.Department
    ADD WebAddress nvarchar(255) NOT NULL
    CONSTRAINT DF_WebAddress DEFAULT 'www.example.com';

ALTER TABLE dbo.Department
    ADD TempColumn INT;
GO

ALTER TABLE dbo.Department
    DROP COLUMN TempColumn;

B. 使用 HIDDEN 旗標新增期間資料行

ALTER TABLE dbo.Department
    ALTER COLUMN ValidFrom ADD HIDDEN;

ALTER TABLE dbo.Department
    ALTER COLUMN ValidTo ADD HIDDEN;

您可以使用 ALTER COLUMN <period_column> DROP HIDDEN 清除期間資料行上的隱藏旗標。

C. 變更將 SYSTEM_VERSIONING 設定為 OFF 的結構描述

下列範例示範如何變更仍需要設定 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;