模式比较脚本生成忽略SSDT重构重命名

时间:2013-11-19 21:09:22

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

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

但是,当我从我的项目运行Schema Comparison到我的数据库然后生成脚本时,该脚本不提及重构,并希望删除现有列名并使用新名称添加它。

我在这个数据库中没有_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.
*/

我怎样才能使这个工作?

注意:在运行架构比较之前,已保存项目文件(以及所有其他文件)。重构日志文件是预先存在的,除了从当前更改集中新增的两个条目之外,大约一年前我使用重构重命名功能时大约有六个条目。并不是说这个功能对我来说从来没有用过,它曾经不再适用于它。

我正在使用VS 2012 Premium 11.0.60610.01 Update 3和SSDT 11.1.31009.1。

谢谢, 标记

2 个答案:

答案 0 :(得分:1)

我不确定这是否是您需要的答案,Mark,但我在此处描述了我对此问题的解决方案:SQL Server Data Tools Ignores Refactor on Schema Compare。实质上,SQL Data Tools维护数据库中的元数据,以确保重构只执行一次。我有兴趣知道这是否是您问题的根源。如果没有,你找到了正确的解决方案吗?

答案 1 :(得分:0)

我刚遇到同样的问题,没有提出任何建议。事实证明 - 在我的情况下,至少 - 重构日志文件的Build Action属性设置为&#34; None&#34; - 它应设置为&#34; RefactorLog&#34;。一旦我更改了此设置并重新生成了脚本,就会在生成的脚本中解决日志中的所有关联条目。

希望这有助于某人。