Не совсем уверен, почему вы получаете именно это сообщение об ошибке.
Я проверил ваш код на db fiddle и получил разные ошибки.
Кстати, обратите внимание, что вам не нужно писатьтаблица истории самостоятельно - если вы только задаете ее имя с помощью SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[MyTableHistory])
, а не создаете его, SQL Server автоматически сгенерирует его для вас - как можно увидеть в этой скрипке .
Для первой попытки Я получил эту ошибку:
Msg 13518 Уровень 16 Состояние 1 Строка 20 Не удалось установить для SYSTEM_VERSIONING значение ON, поскольку таблица истории 'fiddle_e3d361da65804a39b041c8149132b443.dbo.MyTableHistory 'имеет спецификацию столбца IDENTITY.Попробуйте удалить все спецификации столбцов IDENTITY и повторить попытку.
Поэтому я удалил столбец identity
из [Rn]
в таблице истории и повторил попытку .Затем я получил эту ошибку:
Сообщение 13530 Уровень 16 Состояние 1 Строка 20 Установка значения SYSTEM_VERSIONING на ON не удалась, поскольку системный столбец «ValidFrom» в таблице истории «fiddle_d6660ab11cdc448dba35790867169a14.dbo.MyTableHistory» соответствует периодустолбец в таблице 'fiddle_d6660ab11cdc448dba35790867169a14.dbo.MyTable' и не может быть обнуляемым.
Поэтому я изменил оба столбца ValidFrom
и ValidTo
на NOT NULL
и, наконец, получил егорабочая .
Рабочая версия скопирована сюда:
CREATE TABLE [dbo].[MyTableHistory]
(
[TenantId] UNIQUEIDENTIFIER NOT NULL,
[Rn] BIGINT NOT NULL,
[Id] UNIQUEIDENTIFIER NOT NULL,
[PropA] INT NOT NULL,
[PropB] NVARCHAR(100) NOT NULL,
[ValidFrom] DATETIME2 NOT NULL,
[ValidTo] DATETIME2 NOT NULL,
);
CREATE CLUSTERED COLUMNSTORE INDEX [COLIX_MyTableHistory]
ON [dbo].[MyTableHistory];
CREATE NONCLUSTERED INDEX [IX_ImpactHistory_ValidFrom_ValidTo_Id]
ON [dbo].[MyTableHistory] ([ValidFrom], [ValidTo], [Id]);
CREATE TABLE [dbo].[MyTable]
(
[TenantId] UNIQUEIDENTIFIER NOT NULL CONSTRAINT [DF_MyTable_TenantId] DEFAULT CAST(SESSION_CONTEXT(N'TenantId') AS UNIQUEIDENTIFIER),
[Rn] BIGINT IDENTITY(1,1) NOT NULL,
[Id] UNIQUEIDENTIFIER NOT NULL,
[PropA] INT NOT NULL,
[PropB] NVARCHAR(100) NOT NULL,
[ValidFrom] DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL CONSTRAINT [DF_ValidFrom] DEFAULT CONVERT(DATETIME2, '0001-01-01'),
[ValidTo] DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL CONSTRAINT [DF_ValidTo] DEFAULT CONVERT(DATETIME2, '9999-12-31 23:59:59.9999999'),
PERIOD FOR SYSTEM_TIME ([ValidFrom], [ValidTo]),
CONSTRAINT [PK_MyTable] PRIMARY KEY NONCLUSTERED ([Id]),
)
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[MyTableHistory]))
CREATE UNIQUE CLUSTERED INDEX [CIX_MyTable] ON [dbo].[MyTable]([Rn])