You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为已有数据的SQL Server时态表添加IDENTITY列?

时态表添加IDENTITY列的解决方案

可以给时态表添加IDENTITY列,但不能在系统版本控制启用的状态下直接操作,需要按照以下步骤执行:

报错原因

当时态表启用系统版本控制时,主表与历史表的架构必须严格一致。尝试给主表添加IDENTITY列时,SQL Server会自动尝试为历史表也配置相同的IDENTITY属性,但历史表不允许存在IDENTITY列,因此触发错误。

具体操作步骤

  1. 关闭系统版本控制
    先断开主表与历史表的版本关联:

    ALTER TABLE dbo.tArticle SET (SYSTEM_VERSIONING = OFF);
    GO
    
  2. 为主表添加IDENTITY列
    此时可以正常执行添加操作:

    ALTER TABLE dbo.tArticle ADD operationId INTEGER IDENTITY(1,1) NOT NULL;
    GO
    
  3. 为历史表添加对应普通列
    历史表不能设置IDENTITY属性,需添加同类型的普通列,并为已有数据设置默认值:

    ALTER TABLE dbo.tArticleHistory ADD operationId INTEGER NOT NULL DEFAULT 0;
    GO
    -- 若需要将历史表的operationId与主表对应数据关联,可执行以下更新(可选)
    -- UPDATE h
    -- SET h.operationId = t.operationId
    -- FROM dbo.tArticleHistory h
    -- INNER JOIN dbo.tArticle t ON h.articleId = t.articleId;
    
  4. 重新启用系统版本控制
    重新关联主表与历史表,开启版本控制:

    ALTER TABLE dbo.tArticle SET (
        SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.tArticleHistory)
    );
    GO
    

注意事项

  • 重新启用系统版本控制前,主表与历史表的架构必须完全匹配(列名、数据类型、nullable属性一致)
  • 历史表中新增的列只能是普通列,不能设置IDENTITY属性
  • 若有需要,可在关闭版本控制期间完成历史表数据与主表的同步

内容的提问来源于stack exchange,提问作者stranges

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 00:02:35