如何在sybase IQ中修改列的数据类型

时间:2013-07-19 19:00:16

标签: database sybase-iq

有谁知道如何在sybaseIQ中修改列的数据类型?

即我有表:“MY_TABLE”与col STATUS varchar(100) 我想将其更改为varchar(10)

alter table "MY_TABLE" 
    modify "STATUS" varchar(10)

我已经尝试过,但是它似乎没有工作.......

    Error: SQL Anywhere Error -1013024: ALTER TABLE MODIFY <column> <datatype> is not supported.
-- (db_alter.cxx 438) SQLState:  QCA24 ErrorCode: 21 

想法?

2 个答案:

答案 0 :(得分:2)

如错误消息所述,不支持修改IQ中的列数据类型。您需要添加约束,或添加新列,复制数据并删除旧列。

您可以修改列的可空性,而不是基础数据类型。

答案 1 :(得分:0)

请参阅下面与该命令等效的SAP IQ 16, 一旦列中有数据,则不允许使用该值:

不允许:ALTER TABLE MyTableName修改MyExistingColumnName bigint null;

ALTER TABLE MyTableName ADD    MyExistingColumnName_xxxNEWxxx    bigint null;

UPDATE      MyTableName SET    MyExistingColumnName_xxxNEWxxx =  MyExistingColumnName;

--QA
   select count(1) "QA_RESULT"
   from MyTableName 
   Where MyExistingColumnName_xxxNEWxxx != MyExistingColumnName;

--CRITICAL: QA_RESULT MUST BE 0

--ONLY If QA_RESULT IS 0 
  ALTER TABLE MyTableName DROP   MyExistingColumnName;

  ALTER TABLE MyTableName RENAME MyExistingColumnName_xxxNEWxxx To MyExistingColumnName;

--FINAL QA
    select top 100 * 
    from MyTableName 
    where MyExistingColumnName IS NOT NULL;
----
commit;