【发布时间】: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