我有一个 SQL 查询来将计算列添加到系统版本化表中。系统版本控制表当然不允许这样做,所以我首先关闭系统版本控制。查询如下:
--Run in tran so system versioning resets on error
BEGIN TRAN
ALTER TABLE [dbo].[Table] SET (SYSTEM_VERSIONING = OFF);
ALTER TABLE [dbo].[Table] ADD [OBJID] AS SUBSTRING([OBJECTID],3,48) PERSISTED;
ALTER TABLE [dbo].[Table_history] ADD [OBJID] NVARCHAR(48) NULL;
ALTER TABLE [dbo].[Table] SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[Table_history] , DATA_CONSISTENCY_CHECK = OFF ));
COMMIT TRAN
问题是当我作为一个整体运行此查询时,它会给出以下错误:
System-versioned table schema modification failed because adding computed column while system-versioning is ON is not supported.
但是,当我通过选择每一行并运行选择来逐步运行它时,它会按预期运行。我已经盯着这个太久了,任何帮助将不胜感激。
我最终通过执行以下操作解决了这个问题:
DECLARE @sql nvarchar(max)
BEGIN TRAN
ALTER TABLE [hix].[VRLIJST_LSTOPSLG] SET (SYSTEM_VERSIONING = OFF);
SET @sql = 'ALTER TABLE [hix].[VRLIJST_LSTOPSLG] ADD [OBJID] AS SUBSTRING([OBJECTID],3,48) PERSISTED;'
EXEC(@sql)
SET @sql = 'ALTER TABLE [hix].[VRLIJST_LSTOPSLG_history] ADD [OBJID] NVARCHAR(48) NULL;'
EXEC(@sql)
ALTER TABLE [hix].[VRLIJST_LSTOPSLG] SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = [hix].[VRLIJST_LSTOPSLG_history] , DATA_CONSISTENCY_CHECK = OFF ));
COMMIT TRAN
早期的评论促使我这样做。感谢您的帮助!