0

Firebirdサーバーでテーブル列の大文字と小文字を区別しないようにする方法は?

このコードを使用していますが、機能していません..

con.opne();
cmd = new FbCommand("ALTER TABLE asco ALTER COLUMN Final_Model VARCHAR(30) COLLATE Latin1_General_CS_AS NULL", con);
cmd.ExecuteNonQuery();
con.close();

エラー:

ERROR:Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, column 43
VARCHAR
4

1 に答える 1

2

あなたの発言にはいくつかの問題があります。まず、Interbase 6.0 言語リファレンス ( Firebird サイトのドキュメント セクションから入手可能) セクションALTER TABLE(28 ページ) によると、正しい構文は次のとおりです。

ALTER TABLE table <operation> [, <operation> ...];
<operation> = {...
  | ALTER [COLUMN] column_name <alt_col_clause>
  ...}
<alt_col_clause> = {...
  | TYPE new_col_datatype
  ...}

new_col_datatypeこれ以上拡張されていないことに注意してください (datatypeただし、29 ページにあります)。言い換えれば、ステートメントは少なくとも次のようにする必要があります。

ALTER TABLE asco 
  ALTER COLUMN Final_Model 
    TYPE VARCHAR(30)

TYPE列名とデータ型の間の に注意してください。言語リファレンスの BNF 生成の順序から、列の照合も変更できると思われるかもしれませんが、残念ながら変更できません。

したがって、照合を変更する場合は、正しい照合で新しい列を作成し、コンテンツをコピーしてから古い列を削除する必要があります (新しい列の名前を古い列の名前に変更します)。Firebird サポート リストのこのスレッドも参照してください。

Latin1_General_CS_ASそして最後に、1)は大文字と小文字を区別する照合であり、質問に記載されているように区別されないこと、および 2) Firebird は照合を認識していないことを指摘したいと思いますLatin1_General_CS_AS(必要なものに最も近いのは、おそらくデフォルトの照合WIN_PTBRまたはFR_FR_CI_AIです。それ以外の場合は、作成できます1 つは自分で使用CREATE COLLATION)。

于 2012-11-21T16:08:07.253 に答える