如何在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
答案 0 :(得分:2)
您的陈述有几个问题。首先根据Interbase 6.0语言参考(可从documentation section of the Firebird site)部分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产品的顺序可能会让您认为您也可以更改列的排序规则,遗憾的是您不能。
因此,如果要更改排序规则,则必须使用正确的排序规则创建新列,复制内容,然后删除旧列(并将新列重命名为旧列的名称)。另请参阅this thread on the Firebird-support list。
最后我想指出1)Latin1_General_CS_AS
是一个案例敏感整理,并且不像您的问题中所述那样不敏感,2)Firebird不知道整理{{1 (最接近您需要的可能是默认排序规则Latin1_General_CS_AS
或WIN_PTBR
,否则您可以使用CREATE COLLATION
创建一个)。