Я настраивал систему проверки концепции, которая имеет серверную часть SQL Server 2017.
Система использует временные таблицы для записи конфигурации активов и отслеживания изменений во времени.
У меня есть таблица данных, которая связана с таблицей истории, назовем ее dbo.MSSQL_TevenHistoryFor_12345678900.
Все идет нормально. У меня есть две проблемы:
Сегодня я отключил контроль версий в таблице, чтобы добавить вычисляемый столбец. Это было сделано и снова включено без ошибок.
Теперь я обнаружил, что не могу запросить какие-либо исторические данные до изменения. Новые данные добавляются в историю, но заранее ничего нет.
Заглянув внутрь SSMS, я теперь вижу несколько таблиц истории, все с одним и тем же именем, но с шестнадцатеричным суффиксом, например, dbo.MSSQL_TeilitaryHistoryFor_12345678900_A0B1C2D3. Они не связаны под основной таблицей данных. Они просто плавают в базе данных самостоятельно. Когда я запрашивал sys.tables, они не отображаются в виде таблиц истории и не связаны с основной таблицей данных.
Эти таблицы содержат исторические данные, которые отсутствуют.
Поэтому у меня есть следующие вопросы:
- Что представляют собой эти дополнительные таблицы?
- Как они были созданы?
- Есть ли способ каким-то образом связать их с главной цепью истории, чтобы я мог вернуть свои исторические отчеты?
Это очень неприятно, поэтому любая помощь, которую вы можете оказать, будет с благодарностью получена. Спасибо.
Ответы:
Вам необходимо указать имя таблицы истории, чтобы обеспечить непрерывность данных при выключении и включении версий системы. Это поведение упоминается в документации для ALTER TABLE :
Вот демо. Я создам таблицу примеров из документации:
Это приводит к таблице истории с именем
MSSQL_TemporalHistoryFor_1253579504
. Теперь я отключу и включу управление версиями системы:И я в вашей точной ситуации
Теперь я все уберу
Затем создайте таблицу с конкретным именем таблицы истории:
Затем выключите и включите управление версиями системы, но продолжайте указывать имя таблицы истории:
Примечание: в вашей конкретной ситуации вы сможете использовать этот синтаксис для «повторного присоединения» одной таблицы потерянной истории к вашей базовой таблице.
Никаких дополнительных таблиц:
Еда на вынос
Всегда указывайте имя таблицы истории явно при создании временных таблиц или включении системного управления версиями.
Документы MS теперь обращаются к этому конкретно на странице « Остановка системного контроля версий на странице темпоральной таблицы с системным контролем версий» :
источник