SQL 查询在单独运行命令时运行,但在整体运行时不运行

问题描述 投票:0回答:1

我有一个 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.

但是,当我通过选择每一行并运行选择来逐步运行它时,它会按预期运行。我已经盯着这个太久了,任何帮助将不胜感激。

sql sql-server t-sql
1个回答
0
投票

我最终通过执行以下操作解决了这个问题:

   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

早期的评论促使我这样做。感谢您的帮助!

© www.soinside.com 2019 - 2024. All rights reserved.