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 内部で異なる方法で処理されていることに関係があるのではないかと考えています。この列にはインデックスや制約はなく、潜在的な要因を分離しようとして存在していた単一のトリガーを削除しました。さらに困惑しているのは、Name 列を含むほぼ同じスキーマを持つ Companies テーブルへのすべての変更を追跡する Companies_a テーブルがあることです。その列のサイズを問題なく変更できます。これは、必ずしも「名前」という単語の問題ではないことを示しているようです。このテーブルの Sybase Central のすべてのタブを確認しましたが、このテーブルまたはこの列について特別な点や異なる点は見当たりません。

「名前」という言葉は非常に一般的であるため、この問題をグーグルで検索するのは困難です。できる回避策があります(つまり、一時列の作成、列のコピー、削除と再作成、コピーバック)が、可能であれば、ここで何が起こっているのか、その理由を正確に理解したい.

4

2 に答える 2

3

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 フォーラム スレッド

于 2013-01-09T22:18:23.720 に答える