4

我们的数据库中有一个带有“名称”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 内部对“名称”一词的不同处理有关。我们对此列没有索引或约束,并删除了确实存在的单个触发器,只是试图隔离任何潜在因素。更让我们感到困惑的是,我们有一个 Companies_a 表,它跟踪对 Companies 表的所有更改,该表具有几乎完全相同的模式,包括 Name 列。我们能够毫无问题地更改该列的大小,这似乎表明它不一定是“名称”一词的问题。我浏览了该表在 Sybase Central 中的所有选项卡,并没有看到关于该表或该列的任何特殊/不同之处。

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

4

2 回答 2

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 论坛主题

于 2013-01-09T22:18:23.720 回答
0
ALTER TABLE [tableName]
ALTER  [ColumnName] varchar(4000) NULL
于 2017-03-06T18:00:33.273 回答