適用於: SQL Server 2016 (13.x) 及以後版本
Azure SQL Database Azure
SQL Managed Instance
SQL database in Microsoft Fabric
使用 ALTER TABLE 陳述式新增、改變或移除資料行。
Remarks
更改時態表的結構需要目前和歷史資料表的 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欄位 - 將歷程記錄資料表設定為
SPARSE或SPARSE(歷程記錄資料表的預設值) 時,新增DATA_COMPRESSION = PAGE資料行或將現有資料行變更為DATA_COMPRESSION = ROW。 - 新增
COLUMN_SET - 新增
ROWGUIDCOL資料行或將現有資料行變更為ROWGUIDCOL - 如果資料行在目前或歷程記錄資料表中包含 Null 值,則會將
NULL資料行變更為NOT NULL
Examples
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;