Sybase 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'.
我不能是第一个遇到这个问题的人吗?关于我哪里出错的任何想法?
谢谢
最佳答案
解决了。认为根本问题是我是一个工具。
混淆:
IDENTITY_INSERT
和
IDENTITY_UPDATE
所以,我需要做的是:
alter table division add division_id_tmp int IDENTITY not null
SET IDENTITY_UPDATE division ON
update division set division_id_tmp = division_id
SET IDENTITY_UPDATE division OFF
alter table division drop division_id
EXEC sp_rename
@objname = 'division.division_id_tmp',
@newname = 'division_id',
@objtype = 'COLUMN'
任务完成!
关于sybase - 将现有的 int 列更改为 sybase 中的标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20958702/