我继承了一个Sybase数据库,该数据库启用了“unique auto_identity index”选项。作为升级过程的一部分,我需要在此数据库的表中添加一些额外的列,即
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 / Windows上试过这个)
更新2:
这是Sybase dbisql 接口中的一个错误,客户端工具Sybase Central和Interactive SQL用来访问数据库,它只会影响启用了“unique auto_identity index”选项的表
要解决此问题,请使用其他SQL客户端(例如,通过JDBC)连接到数据库或在命令行中使用 isql 。
答案 0 :(得分:1)
对于具有此类列的ALTER TABLE应该没有问题;错误消息表明问题与其他问题有关。我需要看到CREATE TABLE DDL。
即使我们不能首先尝试ALTER TABLE,也有几种解决办法。
<强>响应强>
哈!内部Sybase错误。打开TechSupport案例。
解决方法:
如果表非常大,并且时间是个问题,那么使用bcp。你需要先研究一下,我很乐意随后回答问题。
答案 1 :(得分:0)
当我运行示例代码时,我首先得到错误:
数据库'mydb'未启用'select into'数据库选项。无法完成具有数据复制的ALTER TABLE。设置'select into'数据库选项并重新运行
这无疑是因为您的表中的数据需要复制,因为新列不为空。这将使用我认为的tempdb,并且您发布的错误消息指的是临时表。是否可能意外地为tempdb启用了此dboption?
在黑暗中这是一个镜头,因为我只有12.5在这里测试,它对我有用。或者它可能是一个错误。