我正在尝试从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
Run Code Online (Sandbox Code Playgroud)
我怀疑对各个表的访问是受控制的,但如果可能的话,则无法确定如何重新获得访问权限.
默认情况下,Firebird(以及大多数其他数据库)中的对象名称不区分大小写,但带有catch:如果创建或引用没有引号的表(或其他对象)名称,则实际上将其视为大写.仅当对象名称括在引号中时,它区分大小写并按原样引用.此行为在SQL标准中指定(请参阅SQL:2011 Foundation,5.2 <token>和<separator>以及5.4名称和标识符).
这意味着customer,Customer,CUSTOMER,CuStOmEr和"CUSTOMER"所有引用同一个表,即:CUSTOMER.
当你创建一个表"Customer"(注意引号),它被存储在元数据Customer,但它只能作为参考来"Customer"使用,Customer还是会参考CUSTOMER如不带引号的对象名称不区分大小写.
您尝试使用显示表
show table Customer;
Run Code Online (Sandbox Code Playgroud)
请注意错误消息中CUSTOMER的大写使用:
此数据库中没有表CUSTOMER
输出show tables显示你有一个表Customer(而不是CUSTOMER),所以你需要引用它"Customer".你需要使用:
show table "Customer";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
453 次 |
| 最近记录: |