firebird isql:“此数据库中没有表XXXX”

时间:2014-10-04 13:33:12

标签: sql firebird isql

我正在尝试从Firebird 2.5 SQL数据库中提取数据以进行迁移。数据已经通过嵌入了Firebird 2.5数据库的软件在很长一段时间内建立起来 - 而软件公司在允许以易于迁移的形式访问我们的数据方面没有帮助......

通过更改security2.fdb文件,我可以使用管理员用户名isql通过SYSDBA访问数据库,并可以列出数据库中的表,但是对单个表的任何进一步访问都会抛出消息:“此数据库中没有表XXXX”

以下是Windows命令提示符的示例:

SQL> show tables;
        ....
        ....
        Customer
        ....
SQL> show table customer;
There is no table CUSTOMER in this database

我怀疑是否可以控制对各个表的访问,但如果可以的话,则无法确定如何重新获得访问权。

1 个答案:

答案 0 :(得分:5)

默认情况下,Firebird(以及大多数其他数据库)中的对象名称不区分大小写,但带有catch:如果创建或引用没有引号的表(或其他对象)名称,则实际上将其视为大写。仅当对象名称括在引号中时,它区分大小写并按原样引用。此行为在SQL标准中指定(请参阅SQL:2011 Foundation, 5.2< token>和< separator> 以及 5.4名称和标识符)。

这意味着customerCustomerCUSTOMERCuStOmEr"CUSTOMER"都引用同一个表,即:CUSTOMER。< / p>

当您创建表格"Customer"(请注意引号)时,它会以Customer的形式存储在元数据中,但只能使用"Customer"将其引用为Customer仍将引用CUSTOMER,因为不带引号的对象名称不区分大小写。

您尝试使用

显示表格
show table Customer;

请注意错误消息中CUSTOMER的大写使用:

  

此数据库中没有表格 CUSTOMER

show tables的输出显示您有一个表Customer(而不是CUSTOMER),因此您需要将其引用为"Customer"。你需要使用:

show table "Customer";