5

ищет обходные пути для:Избегайте несоответствие схемы в системе контроля версий таблиц

Error: SQL71609: System-versioned current and history tables do not have matching schemes. Mismatched column: 'XXXX'. 

При попытке использовать SQL System 2016-версированный (Temporal) таблицы в SSDT для Visual Studio 2015.

I» ве определил основную таблицу:

CREATE TABLE [dbo].[Example] (
    [ExampleId] INT NOT NULL IDENTITY(1,1) PRIMARY KEY, 
    [ExampleColumn] VARCHAR(50) NOT NULL, 
    [SysStartTime] datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL, 
    [SysEndTime] datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL, 
    PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime) 
) 
WITH (SYSTEM_VERSIONING=ON(HISTORY_TABLE=[history].[Example])) 
GO 

(при условии [history] схемы правильно создан в SSDT). Это строит отлично в первый раз.

Если я позже внести изменения:

CREATE TABLE [dbo].[Example] (
    [ExampleId] INT NOT NULL IDENTITY(1,1) PRIMARY KEY, 
    [ExampleColumn] CHAR(50) NOT NULL, -- NOTE: Changed datatype 
    [SysStartTime] datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL, 
    [SysEndTime] datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL, 
    PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime) 
) 
WITH (SYSTEM_VERSIONING=ON(HISTORY_TABLE=[history].[Example])) 
GO 

Тогда сборка завершается с сообщением об ошибке выше. Любое изменение типа данных, длины, точности или масштаба приведет к этой ошибке. (Включая изменение от VARCHAR до CHAR и VARCHAR(50) до VARCHAR(51); изменение NOT NULL на NULL не вызывает ошибки.) Выполнение Clean не исправить.

Мое текущее обходное решение заключается в том, чтобы убедиться, что у меня установлена ​​последняя версия в исходное управление, затем откройте обозреватель объектов SQL Server, разверните папку Projects - XXXX и перейдите к затронутой таблице, а затем удалите ее. Затем мне нужно восстановить код (который удаляет SSDT) ​​из исходного элемента управления. Эта процедура утомительна, опасна, а не то, что я хочу делать.

Кто-нибудь нашел способ исправить это? Это ошибка?

Я использую Microsoft Visual Studio Professional 2015, версия 14.0.25431.01 Обновление 3 с помощью инструментов данных SQL Server 14.0.61021.0.

+0

Ваш стол не похож на действительную таблицу с системной версией - в ней отсутствуют столбцы «ПЕРИОД ДЛЯ СИСТЕМНОГО ВРЕМЕНИ» и «ПЕРИОД» - https://msdn.microsoft.com/en-us/library/mt590957. aspx –

+0

Вы верны! Я забыл включить их, когда я построил примеры. Я исправил сообщение. –

+0

Я не могу воспроизвести это в RTM SQL 2016, выполнив инструкцию 'ALTER TABLE'. Как вы изменяете свою схему? –

ответ

4

Я могу воспроизвести эту проблему. Мы (команда разработчиков SQL Server) будем работать, чтобы зафиксировать это в будущей версии SSDT. Тем временем, я считаю, что вы можете обойти это, явно указав таблицу истории (то есть добавьте таблицу истории с ее желаемой схемой в проект), а затем вручную сохраните схему текущей и истории таблицы в синхронизации.

Если у вас возникли проблемы с явным определением таблицы истории, попробуйте закрыть Visual Studio, удалив файл DBMDL в корне проекта, а затем повторно открыв проект.

+0

Обходной путь хорош ...много лишнего ввода, но он работает. Благодаря! –

+2

По-прежнему не исправлено с 20170512 –

5

Мы только что испытали эту проблему. Мы нашли обходное решение, закомментировав элементы управления версиями системы таблицы (фактически сделав ее обычной таблицей), построив проект с изменением схемы, которое нам было необходимо (что преуспевает), а затем снова вернуло строки управления версиями системы (что также успешно).

 Смежные вопросы

  • Нет связанных вопросов^_^