變更系統版本設定時態表的結構描述
適用於:SQL Server 2016 (13.x) 和更新版本 Azure SQL 資料庫 Azure SQL 受控執行個體
使用 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
。 無論針對 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
下列範例示範如何變更仍需要設定 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 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應