更改系统版本控制的临时表的架构
适用于: 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
句点列的属性。不能将 direct
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 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈