變更系統版本設定時態表的結構描述
適用於: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 = PAGE
或DATA_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;