2014-10-04 17 views
2

我想從遷移的Firebird 2.5 SQL數據庫中提取數據。這些數據已經通過嵌入了Firebird 2.5數據庫的軟件長期建立起來 - 而且該軟件公司不允許以易於遷移的形式訪問我們的數據......firebird isql:「在這個數據庫中沒有表XXXX」

通過更改安全性2整個.fdb文件,我可以使用管理員用戶名SYSDBA通過isql訪問數據庫,可以列出在數據庫中的表,但個別表的任何進一步的訪問總是拋出消息:「有在這個數據庫中沒有表XXXX」

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

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

我懷疑對單個表的訪問是受到控制的,但是如果可能的話,無法解決如何重新獲得訪問權限。

+0

僅長鏡頭:是否區分大小寫?你有沒有嘗試完全匹配所示表格的情況?否則它可能是安全的,我不能幫助 – 2014-10-04 13:43:06

+0

不區分大小寫 - 希望這是我的問題的答案! – Dzseti 2014-10-04 13:45:34

+0

嗯,是的,抱歉,但這是從我這裏。祝你好運。 – 2014-10-04 13:46:42

回答

4

默認情況下,Firebird(和大多數其他數據庫)中的對象名不區分大小寫,但帶有一個catch:如果您創建或引用不帶引號的表(或其他對象)名稱,則實際上將其視爲大寫。只有在引號中包含對象名稱時,纔會區分大小寫和引用。此行爲在SQL標準中指定(請參閱SQL:2011 Foundation,5.2 <標記>和<分隔符>連同5.4名稱和標識符)。

這意味着customerCustomerCUSTOMERCuStOmEr"CUSTOMER"所有引用同一個表,即:CUSTOMER

當你創建一個表"Customer"(注意引號),它被存儲在元數據Customer但它只能作爲"Customer"使用Customer仍將引用CUSTOMER爲不帶引號的對象名稱是不區分大小寫引用。

試圖顯示使用

show table Customer; 

注意錯誤消息的大寫的使用客戶表:

沒有表客戶在這個數據庫中

show tables的輸出顯示您有一張表Customer(且沒有t CUSTOMER),所以你需要把它作爲"Customer"。您需要使用:

show table "Customer"; 
+0

可能值得注意的是,這並不是火鳥特有的。此行爲由SQL標準定義(並且是必需的),許多其他DBMS的行爲方式也是一樣。 – 2014-10-04 14:42:17

+0

@a_horse_with_no_name您說得對,我添加了對SQL標準相關部分的引用。 – 2014-10-04 14:56:17

相關問題