Sybase - 更改"Name"列的大小 - "Illegal Column Definition"错误



我们的数据库中有一个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"的不同处理有关。我们在该列上没有索引或约束,并且删除了曾经存在的单个触发器,只是试图隔离任何潜在因素。更让我们困惑的是,我们有一个company_a表,它跟踪对Companies表的所有更改,该表具有几乎完全相同的模式,包括Name列。我们能够毫无问题地更改列的大小,这似乎表明它不一定是单词"Name"的问题。我已经检查了Sybase Central中这个表的所有选项卡,没有发现这个表或这个列有什么特别/不同之处。

在谷歌上搜索这个问题很困难,因为"Name"这个词非常常见。我们有变通的办法。创建临时列,复制,删除&但如果可能的话,我想确切地了解这里发生了什么以及为什么。

我认为我们的Companies表和这一列很可能是在以前的ASA版本中创建的。inline_max列。Systabcol被设置为null,我们不能更改它。

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

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

然后我就可以运行这个语句而没有错误了:

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

我在这里找到了修复的一般概念:Sybase SqlAnywhere论坛主题

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

最新更新