Sybase - 更改“名称”列的大小 - “非法列定义”错误

时间:2013-01-09 16:25:03

标签: sqlanywhere

我们的数据库中有一个Companies表,其中包含“Name”varchar列,其大小目前为30个字符。我们看似简单的将其大小改为50个字符的任务变成了一个问题。尝试更改它并通过Sybase Central保存更改时,我们收到以下错误:

[Sybase][ODBC Driver][SQL Anywhere]Illegal column definition: Name
SQLCODE: -1046
SQLSTATE: 42000
SQL Statement: ALTER TABLE "DBA"."Companies" ALTER "Name" VARCHAR(50)

我们已经尝试过各种各样的转义字符,认为它可能与Sybase在内部对待“Name”这个词有关。我们没有对此列的索引或约束,并且已经删除了仅仅尝试隔离任何潜在因素而存在的单个触发器。进一步困扰我们的是,我们有一个Companies_a表,它跟踪Companies表的所有更改,这些更改几乎完全相同,包括Name列。我们能够毫无问题地更改该列的大小,这似乎表明它不一定是“名称”一词的问题。我已经浏览了Sybase Central中针对此表的所有选项卡,并且没有看到关于此表或此列的任何特殊/不同的内容。

谷歌搜索这个问题很困难,因为“名字”这个词很常见。我们可以做的解决方法(即创建临时列,复制,删除和重新创建列,复制回来),但如果可能的话,我想了解这里发生了什么以及为什么。

2 个答案:

答案 0 :(得分:3)

我认为我们的公司表和本专栏可能是在之前版本的ASA中创建的。 sys.systabcol中的inline_max列设置为null,我们无法更改它。

运行以下语句设置默认值:

ALTER TABLE "DBA"."Companies" ALTER "Name" inline use default prefix use default;

然后我能够毫无错误地运行此语句:

ALTER TABLE "DBA"."Companies" ALTER "Name" VARCHAR(50);

这是我找到修复的一般概念的地方: Sybase SqlAnywhere forum thread

答案 1 :(得分:0)

ALTER TABLE [tableName]
ALTER  [ColumnName] varchar(4000) NULL