赛贝斯12.5
我有一个正在生产中的现有表,需要更改它的 PK int 列,以便自动填充 - 创建表时,理想情况下将 ID 列创建为标识。此 ID 列是多个其他表中的外键,因此不能删除该表并重新开始。问题是,我无法将 PK 设置为 IDENTITY,并且使用当前值创建临时列并将它们复制到新的 IDENTITY 列也失败。
由于 ID 列已经填充,我不能简单地将这一列转换为 IDENTITY(至少,我还没有找到任何可以执行此操作的 SQL)。
我创建了该表的副本,其中有一个附加列保存当前 PK 值 (division_id_tmp)。
CREATE TABLE division_tmp
(
division_id int IDENTITY NOT NULL
division_id_tmp int,
description varchar(255) NOT NULL,
is_active tinyint DEFAULT 1 NOT NULL,
)
当我尝试从原始表中输入数据脚本时
INSERT INTO division_tmp
(description,is_active,division_id_tmp,division_id)
VALUES
('TEST',1,36,34)
我收到以下错误:
Error: Explicit value specified for identity field in table 'division_tmp'
when 'SET IDENTITY_UPDATE' is OFF.
如果我运行该语句:
SET IDENTITY_INSERT division_tmp OFF
该语句执行时没有任何抱怨,但尝试插入数据脚本会导致与上面相同的错误。如果我运行该语句
SET IDENTITY_INSERT ac_division_lookup_awd ON
我收到错误
Error: Unable to 'SET IDENTITY_INSERT' for table '**division_tmp**' because
IDENTITY_INSERT or IDENTITY_UPDATE is already ON for the table '**division**' in
database 'preserve'.
我不可能是第一个遇到这个问题的人吧?关于我哪里出错了有什么想法吗?
Thanks