我已经在 SQL Azure 中创建了一些时态表,但我不知道如何修改它们。添加新列或修改现有列的最佳方法是什么?
最佳答案
MSDN有很多例子,在早期版本的 CTP 中,如果不将 system_versioning 设置为 off,则无法更改临时表。但是从 CTP3 开始,您可以这样做...这里有一些示例..
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 SysStartTime ADD HIDDEN;
ALTER TABLE dbo.Department
ALTER COLUMN SysEndTime ADD HIDDEN;
MSDN 还建议在事务中进行任何方案更改,如下所示。
BEGIN TRAN
---set system versioning to off
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 DEFAULT 0;
--specifying history table is needed with out which ,SQL adds a new history table
ALTER TABLE [dbo].[CompanyLocation]
SET
(
SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[CompanyLocationHistory])
);
COMMIT ;
您可能想知道为什么我们需要关闭系统版本控制,正如我上面所说,从 ctp3.0 开始不需要它就可以完成,这是因为有一些限制..
您不能使用直接 ALTER 来更改以下架构。对于这些类型的更改,请设置 SYSTEM_VERSIONING = OFF。
Adding a computed column
Adding an IDENTITY column
Adding a SPARSE column or changing existing column to be SPARSEwhen the history table is set to DATA_COMPRESSION = PAGE or DATA_COMPRESSION = ROW, which is the default for the history table.
Adding a COLUMN_SET
Adding a ROWGUIDCOL column or changing existing column to be ROWGUIDCOL
关于azure - 如何修改 SQL Server 2016 或 Azure 中的时态表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36274830/