Переименование столбцов в системной версионной таблице Visual Studio SQL Project

Я хочу, чтобы Visual Studio SQL Schema Compare генерировал дельта-SQL для обновления производственной базы данных, включая переименование столбца в таблице с включенным контролем версий системы (временная таблица).

Использование рефакторинга в Visual Studio SQL Project действительно создаст запись в файле refactorlog и сгенерирует правильный sp_rename SQL для этого переименованного поля. Однако соответствующая таблица истории не переименовывает поле - она ​​выполняет удаление и добавление, которые не будут работать должным образом, если в таблице есть реальные данные. Кроме того, это также позволяет синхронизировать таблицы друг с другом.

Может быть, я мог бы изменить XML-код refactorlog, чтобы указать, что это поле с прикрепленной таблицей истории? приведенный ниже XML-код показывает, что типом элемента является "SqlSimpleColumn". Есть ли другие варианты, которые я мог бы изучить?

Система: Visual Studio Community 2017 SQL Server: база данных SQL Azure 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>

0 ответов

Да, вы можете отключить управление версиями системы перед внесением изменений в таблицу. ALTER TABLE [dbo].[TABLE_NAME] SET ( SYSTEM_VERSIONING = OFF) GO

Это позволит вам вносить изменения в таблицу. ВНИМАНИЕ! Предупреждение: когда вы выполняете процедуру sp_rename для переименования столбца, в системной версионной (временной) таблице он прерывает историю версий для этого объекта.

Ручное использование 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.

Возможно ли для вас делать то, что он рекомендует?

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