如何在Firebird服务器中使表列不区分大小写?

时间:2012-11-21 06:47:46

标签: firebird

如何在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

1 个答案:

答案 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_ASWIN_PTBR,否则您可以使用CREATE COLLATION创建一个)。