Проект базы данных Visual Studio SQL Server 2016 и временные таблицы

Есть ли способ включить временные таблицы в проекте базы данных Visual Studio SQL Server 2016? Я не могу найти способ заставить это работать. Я предполагаю, что это может быть проблема совместимости, единственный способ, который я нашел, - это включить таблицу в сценарии после развертывания, но затем при следующем развертывании сценарий генерирует капли для рассматриваемых столбцов.


person gmn    schedule 06.12.2016    source источник
comment
Какую версию Visual Studio и SSDT вы используете? Каково точное поведение? Вы говорите, что попытка развертывания в существующей базе данных генерирует операторы DROP для существующих столбцов без создания временных таблиц? Просмотр временных таблиц является самым безопасным вариантом   -  person Panagiotis Kanavos    schedule 09.01.2017
comment
Какие изменения вы пытались внедрить?   -  person Panagiotis Kanavos    schedule 09.01.2017
comment
Я не могу воспроизвести это. В SSDT уже есть шаблон для темпоральных таблиц. При изменении таблицы создаются ожидаемые операторы модификации схемы, которые сначала копируют данные во временную таблицу, чтобы избежать потери данных.   -  person Panagiotis Kanavos    schedule 09.01.2017
comment
Я понимаю, что это очень старый пост, но у меня была похожая проблема. Оказалось, что проблема никак не связана с темпоральными таблицами. Это было как раз то, что Schema Compare отметило как проблему. Настоящая проблема заключалась в том, что мой проект базы данных не компилировался, потому что моя база данных содержала ссылки на другие базы данных. Мне пришлось добавить проекты базы данных для всех упомянутых баз данных, добавить ссылки на каждую базу данных, ссылающуюся на другие базы данных, и изменить имя базы данных на переменную в коде sql, вызывающем другую базу данных.   -  person SlipEternal    schedule 06.03.2020


Ответы (1)


Временные таблицы поддерживаются. Последняя версия SSDT для Visual Studio 2015 уже содержит шаблон темпоральной таблицы, который добавляет предложение WITH (SYSTEM_VERSIONING = ON(HISTORY_TABLE=[dbo].[MyTempTable_HISTORY], DATA_CONSISTENCY_CHECK=ON)) в сценарий создания таблицы и создает таблицу журнала.

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

Единственное «странное» поведение заключается в том, что таблица history создается заново даже для рефакторинга переименования, который генерирует команду sp_rename, например:

GO
EXECUTE sp_rename @objname = N'[dbo].[MyTempTable].[Name]', @newname = N'Name1', @objtype = N'COLUMN';


GO
PRINT N'Starting rebuilding table [dbo].[MyTempTable_HISTORY]...';


GO
CREATE TABLE [dbo].[tmp_ms_xx_MyTempTable_HISTORY] (
person Panagiotis Kanavos    schedule 09.01.2017
comment
Это работает даже со столбцами GENERATED ALWAYS AS ROW START? - person gmn; 09.01.2017
comment
Что работает? Шаблон содержит столбцы периода, и у них есть предложение GENERATED ALWAYS AS ROW START/END. Вы можете изменить их имена на любые, какие захотите, перед публикацией. - person Panagiotis Kanavos; 09.01.2017