【问题标题】:Renaming columns in a system versioned table Visual Studio SQL Project重命名系统版本表中的列 Visual Studio SQL 项目
【发布时间】:2017-08-28 23:24:42
【问题描述】:

我希望让 Visual Studio 的 SQL 架构比较生成增量 SQL 以更新生产数据库,包括在系统版本控制(临时表)上的表上重命名列。

在 Visual Studio SQL 项目中使用重构确实会在重构日志文件中创建一个条目,并将为该重命名的字段生成正确的 sp_rename SQL。但是,关联的历史表不会重命名字段 - 它会进行删除和添加,一旦表中有实际数据,这将无法正常工作。此外,它还可以使表格彼此不同步。

也许我可以修改重构日志 XML 以表明它是一个附加了历史表的字段?下面的 XML 显示 Elementtype 是“SqlSimpleColumn”。还有其他我可以探索的选择吗?

系统:Visual Studio 社区 2017 SQL 服务器:Azure SQL 数据库 V12

  <Operation Name="Rename Refactor" Key="48b6ef58-988b-48bf-9606-4048b0c51bf2" ChangeDateTime="04/03/2017 21:19:32">
    <Property Name="ElementName" Value="[dbo].[xyz2].[newafterreset]" />
    <Property Name="ElementType" Value="SqlSimpleColumn" />
    <Property Name="ParentElementName" Value="[dbo].[xyz2]" />
    <Property Name="ParentElementType" Value="SqlTable" />
    <Property Name="NewName" Value="[updateafterreset]" />
  </Operation>

【问题讨论】:

    标签: visual-studio-2017 temporal sqlproj refactoring-databases


    【解决方案1】:

    是的,您可以在更改表格之前关闭系统版本控制。 ALTER TABLE [dbo].[TABLE_NAME] SET (SYSTEM_VERSIONING = OFF) 去吧

    这将允许您对表格进行更改。 注意:请注意 - 当您执行 sp_rename 重命名列时,在系统版本化(临时)表上,它会破坏该实体的版本历史记录

    【讨论】:

      【解决方案2】:

      在系统版本化历史表上手动使用 sp_rename 会导致以下错误:

      Msg 13759, Level 16, State 1, Procedure sp_rename, Line 316
      Renaming a column failed on history table '<database name>.dbo.<table name>History' because it is not a supported operation on system-versioned tables.
      Consider setting SYSTEM_VERSIONING to OFF and trying again.
      

      你可以按照它的建议去做吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-25
        • 2011-12-23
        • 2011-04-22
        • 2011-07-15
        • 2011-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多