Избегайте несоответствия схемы в системных версиях таблиц
В поисках обходного пути для:
Error: SQL71609: System-versioned current and history tables do not have matching schemes. Mismatched column: 'XXXX'.
При попытке использования системно-версионных (временных) таблиц SQL 2016 в SSDT для Visual Studio 2015.
Я определил базовую таблицу:
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 Data Tools 14.0.61021.0.
2 ответа
Я могу воспроизвести эту проблему. Мы (команда инструментов SQL Server) будем работать над исправлением этой проблемы в будущей версии SSDT. В то же время, я полагаю, что вы можете обойти это, явно определив таблицу истории (то есть добавьте таблицу истории с ее желаемой схемой в проект), а затем вручную синхронизируйте схему текущей и хронологической таблиц.
Если у вас возникли проблемы с явным определением таблицы истории, попробуйте закрыть Visual Studio, удалить файл DBMDL в корне проекта, а затем снова открыть проект.
Мы только что столкнулись с этой проблемой. Мы нашли обходной путь, закомментировав системные элементы управления версиями таблицы (фактически сделав ее обычной таблицей), построив проект с нужным нам изменением схемы (что успешно), а затем вернув на место строки управления версиями системы (что также успешно).
На всякий случай кто-то столкнулся с такой же проблемой:
Чтобы исправить это, перейдите в папку [YourDatabaseProject]/bin/Debug и очистите ее, а затем выполните сборку, ничего не удаляя.
Надеюсь это поможет!