将列与unique auto_identity index设置选项SYBASE表(Adding co

2019-09-29 07:26发布

我继承了其上具有启用了“unique auto_identity index设置”选项Sybase数据库。 作为升级过程的一部分,我需要一些额外的列在这个数据库中,即添加到表

alter table mytable add <newcol> float default -1 not null

当我尝试这样做,我得到了如下错误:

Column names in each table must be unique, column name SYB_IDENTITY_COL in table #syb__altab....... is specifed more than once

是否有可能将列添加到一个表,这个属性启用?

更新1:

我创建了下面的测试复制问题:

use master
sp_dboption 'esmdb', 'unique auto_identity indexoption',true

use esmdb

create table test_unique_ids (test_col char)

alter table test_unique_ids add new_col float default -1 not null

这里的alter table命令产生错误。 (已在ASE试过这个15 / Solaris和15.5 /视窗)

更新2:

这是在Sybase DBISQL界面中的错误,客户端工具Sybase Central和Interactive SQL使用来访问数据库,并似乎只影响表的“unique auto_identity index设置”选项启用。

要解决的问题使用不同的SQL客户端(通过JDBC例如)连接到数据库或在命令行上用isql。

Answer 1:

应该是改变与此类列的表没问题; 该错误消息指出问题对于别的东西。 我需要看到的CREATE TABLE DDL。

即使我们不能ALTER TABLE,我们将首先尝试,也有一些变通。

回应

哈! 内部Sybase错误。 打开010-62529275情况。

解决方法:

  1. 确保你得到J此时确切的DDL。 则sp_help。 请注意,IDENTITY列和索引。
  2. 创建一个临时表,完全一样的。 使用来自(1)的DDL。 排除指数。
  3. INSERT NEW_TABLE选择OLD_TABLE。 如果表很大,分解成每批次1000个行。
  4. 现在创建的索引。

如果表是非常大的,而时间是一个问题,然后使用BCP。 首先,您需要研究的是,我很乐意以后回答问题。



Answer 2:

当我运行示例代码我第一次得到的错误:

“选择为”数据库选项不为数据库“MYDB”启用。 ALTER TABLE数据拷贝无法做到的。 设置“选择为”数据库选项,然后重新运行

这是毫无疑问的,因为你的表中的数据复制需求,因为新列不为空。 这将使用tempdb我想,你已经发布错误消息是指临时表。 是否有可能,这将dboption已经为tempdb被意外启用?

这有点在黑暗中拍摄的,因为我只有12.5到这里测试的,它为我工作。 或者,它可能是一个错误。



文章来源: Adding columns to a sybase table with unique auto_identity index option