SSDT Refactor Rename игнорируется генерацией скрипта сравнения схем

Я щелкнул правой кнопкой мыши по имени столбца в скрипте CREATE TABLE и выбрал Refactor | Переименовать. Столбец переименовывается, и ожидаемая запись появляется в XML-файле refactorlog.

Однако, когда я запускаю Сравнение схем из своего проекта в базу данных и затем генерирую сценарий, сценарий не содержит упоминаний о рефакторинге и хочет удалить существующее имя столбца и добавить его с новым именем.

У меня нет таблицы _RefactorLog в этой базе данных. Сценарий развертывания не пытается его создать. Как будто он полностью игнорирует наличие XML-файла refactorlog.

Файл 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.
*/

Как я могу заставить это работать?

Примечание. Файл проекта (и все остальные файлы) был сохранен перед выполнением сравнения схем. Файл refactorlog уже существовал. В нем было около полудюжины записей, когда я последний раз использовал функцию переименования рефактора около года назад, в дополнение к двум записям, которые являются новыми из текущего набора изменений. Дело не в том, что эта функция никогда не работала для меня, а в том, что она больше не работает, когда раньше работала.

Я использую VS 2012 Premium 11.0.60610.01 Обновление 3 с SSDT 11.1.31009.1.

Спасибо Марк

2 ответа

Я не уверен, нужен ли вам этот ответ, Марк, но мое решение этой проблемы описано здесь: Инструменты данных SQL Server игнорируют Refactor в Schema Compare. По сути, инструменты данных SQL поддерживают метаданные в базе данных, чтобы гарантировать, что рефакторинг выполняется только один раз. Мне было бы интересно узнать, было ли это источником вашей проблемы. Если нет, вы когда-нибудь находили правильное решение?

Я только столкнулся с той же самой проблемой, ни одно из предложений не сработало. Оказывается, что, по крайней мере, в моем случае свойство Build Action для файла журнала рефакторинга было установлено равным "None", для него должно быть установлено значение "RefactorLog". После того как я изменил этот параметр и заново сгенерировал скрипт, все связанные записи в журнале были учтены в сгенерированных скриптах.

Надеюсь, это кому-нибудь поможет.

Другие вопросы по тегам