sybase - 将现有的 int 列更改为 sybase 中的标识

标签 sybase identity identity-column

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/

相关文章:

mysql - MySQL 中 *= 运算符的替代方案

sql - 如何使用 SQL*Plus 从 Oracle 复制到 Sybase?

sql-server - SQL Server SCOPE_IDENTITY() - 线程安全

Python - 在嵌套列表中查找具有唯一匹配值的列的平均值

sql-server - 如何合并具有自动编号主键的表?

python - 适用于 Windows 8.1 的 Sybase 的 ODBC 驱动程序是什么?

java - 从 Android 设备卸载应用程序时,从 SUP 服务器删除应用程序连接

mysql - 如何将此 MS SQL 脚本重写为 MySQL 脚本?

java - Java 对象(Eclipse EMF 资源和模型元素)的唯一且可复制的标识符

sql - 在SQL Server 2008中,我应该如何将数据从一个数据库复制到另一个数据库?