Вам необходимо указать имя таблицы истории, чтобы обеспечить непрерывность данных при выключении и включении версий системы. Это поведение упоминается в документации для ALTER TABLE :
Если вы не используете аргумент HISTORY_TABLE, система генерирует новую таблицу истории, соответствующую схеме текущей таблицы, создает связь между двумя таблицами и позволяет системе записывать историю каждой записи в текущей таблице в таблица истории.
Вот демо. Я создам таблицу примеров из документации:
CREATE TABLE dbo.Employee
(
[EmployeeID] int NOT NULL PRIMARY KEY CLUSTERED
, [Name] nvarchar(100) NOT NULL
, [Position] varchar(100) NOT NULL
, [Department] varchar(100) NOT NULL
, [Address] nvarchar(1024) NOT NULL
, [AnnualSalary] decimal (10,2) NOT NULL
, [ValidFrom] datetime2 (2) GENERATED ALWAYS AS ROW START
, [ValidTo] datetime2 (2) GENERATED ALWAYS AS ROW END
, PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH (SYSTEM_VERSIONING = ON);
Это приводит к таблице истории с именем MSSQL_TemporalHistoryFor_1253579504
. Теперь я отключу и включу управление версиями системы:
ALTER TABLE dbo.Employee SET (SYSTEM_VERSIONING = OFF);
ALTER TABLE dbo.Employee SET (SYSTEM_VERSIONING = ON);
И я в вашей точной ситуации
Теперь я все уберу
ALTER TABLE dbo.Employee SET (SYSTEM_VERSIONING = OFF);
DROP TABLE dbo.Employee;
DROP TABLE dbo.MSSQL_TemporalHistoryFor_1253579504;
DROP TABLE dbo.MSSQL_TemporalHistoryFor_1253579504_D0055BB4;
Затем создайте таблицу с конкретным именем таблицы истории:
CREATE TABLE dbo.Employee
(
[EmployeeID] int NOT NULL PRIMARY KEY CLUSTERED
, [Name] nvarchar(100) NOT NULL
, [Position] varchar(100) NOT NULL
, [Department] varchar(100) NOT NULL
, [Address] nvarchar(1024) NOT NULL
, [AnnualSalary] decimal (10,2) NOT NULL
, [ValidFrom] datetime2 (2) GENERATED ALWAYS AS ROW START
, [ValidTo] datetime2 (2) GENERATED ALWAYS AS ROW END
, PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.EmployeeHistory));
Затем выключите и включите управление версиями системы, но продолжайте указывать имя таблицы истории:
ALTER TABLE dbo.Employee SET (SYSTEM_VERSIONING = OFF);
ALTER TABLE dbo.Employee SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.EmployeeHistory));
Примечание: в вашей конкретной ситуации вы сможете использовать этот синтаксис для «повторного присоединения» одной таблицы потерянной истории к вашей базовой таблице.
Никаких дополнительных таблиц:
Еда на вынос
Всегда указывайте имя таблицы истории явно при создании временных таблиц или включении системного управления версиями.
Документы MS теперь обращаются к этому конкретно на странице « Остановка системного контроля версий на странице темпоральной таблицы с системным контролем версий» :
При повторном включении системного управления версиями не забудьте указать аргумент HISTORY_TABLE. В противном случае будет создана новая таблица истории, которая будет связана с текущей таблицей. Исходная таблица истории все еще будет существовать как обычная таблица, но не будет связана с текущей таблицей.