Переименование столбцов в системной версионной таблице 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.
Возможно ли для вас делать то, что он рекомендует?