【问题标题】:SSDT Refactor Rename is ignored by the Schema Comparison script generation架构比较脚本生成忽略 SSDT 重构重命名
【发布时间】:2013-11-19 21:09:22
【问题描述】:

我右键单击 CREATE TABLE 脚本中的列名并选择 Refactor |改名。它重命名了该列,并且预期的条目出现在重构日志 XML 文件中。

但是,当我从我的项目运行架构比较到我的数据库然后生成脚本时,该脚本没有提及重构,并且想要删除现有的列名称并使用新名称添加它。

我在这个数据库中没有 _RefactorLog 表。部署脚本不会尝试创建一个。就好像它完全忽略了 refactorlog XML 文件的存在。

XML 文件确实以预期的 xmlns 开头:

<?xml version="1.0" encoding="utf-8"?>
<Operations Version="1.0" xmlns="http://schemas.microsoft.com/sqlserver/dac/Serialization/2012/02">
   <Operation Name="Rename Refactor" Key="4c6a080c-0626-4824-9b59-8ecfd491319a" ChangeDateTime="11/18/2013 19:03:13">
    <Property Name="ElementName" Value="[dbo].[Report].[Name]" />
    <Property Name="ElementType" Value="SqlSimpleColumn" />
    <Property Name="ParentElementName" Value="[dbo].[Report]" />
    <Property Name="ParentElementType" Value="SqlTable" />
    <Property Name="NewName" Value="[DisplayName]" />
  </Operation>
</Operations>

我在部署脚本中看到了这个:

/*
The column [dbo].[Report].[Name] is being dropped, data loss could occur.

The column [dbo].[Report].[DisplayName] on table [dbo].[Report] must be added,  
but the column has no default value and does not allow NULL values. If the table 
contains data, the ALTER script will not work. To avoid this issue you must 
either: add a default value to the column, mark it as allowing NULL values, or 
enable the generation of smart-defaults as a deployment option.
*/

我怎样才能让它工作?

注意:项目文件(和所有其他文件)在运行架构比较之前已保存。重构日志文件是预先存在的,大约一年前我上次使用重构重命名功能时有大约六个条目,除了当前更改集中的两个新条目。不是这个功能对我没用过,而是它以前用的时候就不行了。

我正在使用带有 SSDT 11.1.31009.1 的 VS 2012 Premium 11.0.60610.01 Update 3。

谢谢, 标记

【问题讨论】:

  • 您是否尝试过“发布”来生成脚本而不是模式比较?我认为架构比较在发布时不会考虑重构。
  • 我从未使用过 Publish。将重构操作考虑在内,从 Schema Compare 生成脚本是可行的。
  • 我会尝试发布选项。我从来没有通过模式比较取得成功。如果这不起作用,则重构语法可能有问题。
  • 发布受到限制,因为它似乎没有排除特定对象的能力。它还忽略了重构日志,并且发布脚本还希望删除名称已更改的列,然后创建新的列。
  • refactorlog 文件中有超过六个先前的条目。大约一年前我最后一次使用此功能时效果很好。我决定将调用 sp_rename 放在一个脚本中,该脚本将在模式比较生成的脚本之前运行。我只需要在这一点上继续前进。感谢您的建议。

标签: sql-server visual-studio-2012 sql-server-data-tools schema-compare


【解决方案1】:

我不确定这是否是您需要的答案,马克,但我对这个问题的解决方案如下所述:SQL Server Data Tools Ignores Refactor on Schema Compare。本质上,SQL Data Tools 在数据库中维护元数据以确保重构只执行一次。我很想知道这是否是您问题的根源。如果没有,您是否找到了正确的解决方案?

【讨论】:

【解决方案2】:

我刚遇到同样的问题,没有任何建议奏效。事实证明 - 至少在我的情况下 - 重构日志文件的 Build Action 属性设置为“None” - 它应该设置为“RefactorLog”。一旦我更改了此设置并重新生成了脚本,日志中的所有相关条目都会在生成的脚本中进行处理。

希望这对某人有所帮助。

【讨论】:

    猜你喜欢
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 2014-02-21
    相关资源
    最近更新 更多