SQL Server Standard中的系统版本时态表是一项昂贵的操作吗?

时间:2017-06-12 07:16:21

标签: sql-server

这是我们将现有非时间转换为时间

的方法
CREATE SCHEMA History;   
    GO   
    ALTER TABLE InsurancePolicy   
       ADD   
          SysStartTime datetime2(0) GENERATED ALWAYS AS ROW START HIDDEN    
               CONSTRAINT DF_SysStart DEFAULT SYSUTCDATETIME()  
          , SysEndTime datetime2(0) GENERATED ALWAYS AS ROW END HIDDEN    
               CONSTRAINT DF_SysEnd DEFAULT CONVERT(datetime2 (0), '9999-12-31 23:59:59'),   
          PERIOD FOR SYSTEM_TIME (SysStartTime, SysEndTime);   
    GO   
    ALTER TABLE InsurancePolicy   
       SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = History.InsurancePolicy))   
    ;  

有人可以解释一下:

  

使用默认值将具有默认值的非可空列添加到现有表中   数据是SQL Server以外的所有版本上的数据操作大小   企业版(它是元数据操作)。随着一个大   包含SQL Server Standard Edition数据的现有历史记录表,   添加非空列可能是一项昂贵的操作。

我正在使用SQL Server标准版,如何通过添加非空列字段来进行昂贵的操作。

参考:https://docs.microsoft.com/en-us/sql/relational-databases/tables/creating-a-system-versioned-temporal-table

1 个答案:

答案 0 :(得分:0)

可以在不更改数据记录的情况下添加可为空的列。默认情况下,它们只是null值,并且不必修改单个记录。

使任何新字段不可为空,如果您有现有记录隐式需要默认值,则要求它在每条记录上设置默认值 。根据需要更新的记录数量,这绝对可能是一项昂贵的操作" *。

*注意:这适用于任何表格更改而不仅仅是时间表。