gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 02:29:06 24 4
gpt4 key购买 nike

我们的数据库中有一个“名称”varchar 列的 Companies 表,其大小目前为 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 中该表的所有选项卡,但没有看到该表或该列的任何特殊/不同之处。

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

最佳答案

我相信我们的 Companies 表和此列可能是在 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

关于sqlanywhere - Sybase - 更改 "Name"列的大小 - "Illegal Column Definition"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14241689/

24 4 0