我正在使用 SQL Server 和系统版本化(临时)表。在我的主表中,我有一INT
列当前允许 NULL。我想将其更新为不允许空值,但表的系统/历史副本允许空值。
我运行这个语句:
ALTER TABLE dbo.MyTable
ALTER COLUMN MyInt INT NOT NULL;
我得到这个错误:
无法将值 NULL 插入列“MyInt”、表“mydb.dbo.MyTable_History”;列不允许空值。更新失败。
我使用这个脚本创建了系统版本表:
ALTER TABLE dbo.MyTable
ADD
ValidFrom DATETIME2 (2) GENERATED ALWAYS AS ROW START HIDDEN CONSTRAINT DFMyTable_ValidFrom DEFAULT DATEADD(SECOND, -1, SYSUTCDATETIME()),
ValidTo DATETIME2 (2) GENERATED ALWAYS AS ROW END HIDDEN CONSTRAINT DFMyTable_ValidTo DEFAULT '9999.12.31 23:59:59.99',
PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo);
ALTER TABLE dbo.MyTable
SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.MyTable_History));
GO
在这种情况下,有没有其他方法可以使我的主表的列不可为空?我想我可以(也许)用任意垃圾值手动更新现有的系统版本化的空值,但似乎这种情况应该支持临时表。