【问题标题】:How do you modify a temporal table in SQL Server 2016 or Azure?如何在 SQL Server 2016 或 Azure 中修改临时表?
【发布时间】:2016-03-29 03:24:29
【问题描述】:

我在 SQL Azure 中创建了一些临时表,但我不知道如何修改它们。添加新列或修改现有列的最佳方法是什么?

【问题讨论】:

    标签: azure azure-sql-database temporal-database


    【解决方案1】:

    MSDN 有很多例子,在早期版本的 CTP 中,如果不将 system_versioning 设置为 off,则无法更改 Temporal table。但是从 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。

    1. 添加计算列

    2. 添加 IDENTITY 列

    3. 添加 SPARSE 列或将现有列更改为 SPARSEwhen 历史表设置为 DATA_COMPRESSION = PAGE 或 DATA_COMPRESSION = ROW,这是历史表的默认值。

    4. 添加 COLUMN_SET

    5. 添加 ROWGUIDCOL 列或将现有列更改为 ROWGUIDCOL

    【讨论】:

      【解决方案2】:

      有两种方法可以改变临时表:

      1. 通过 Transact-SQL 脚本。更多详情见https://msdn.microsoft.com/en-us/library/mt591016.aspx
      2. 使用与 Visual Studio 集成的 SQL Server Data Tools。如果您需要在版本控制系统(例如 TFS)中对数据库脚本进行版本控制,这很方便:https://msdn.microsoft.com/en-us/library/mt204009.aspx

      谢谢, 博尔科·诺瓦科维奇 (MSFT)

      【讨论】:

        【解决方案3】:

        通过脚本。

        ALTER TABLE ... 
        

        世界正在慢慢掌握 DevOps,而用于处理快速变化的图形用户界面并没有真正的帮助。

        每个修改脚本和修改都应该存储在版本控制中,并针对现代的基于云的现实执行,这基本上意味着我们以前可以用简单的设计师来做的事情,现在我们通常写成脚本可以应用于数据库集群,用于重建测试环境等。

        我知道这不是最有趣的答案,但为此做好准备对你未来的技能组合至关重要。

        【讨论】:

          猜你喜欢
          • 2017-05-26
          • 2018-02-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多