2011-08-10 50 views

回答

3

不應該依賴ODBC中不區分大小寫的表名。您可以使用ODBC SQLGetInfo調用,告訴您它們是否區分大小寫以及它們是大寫還是小寫。有些數據庫/驅動程序在引用表格時會維持大小寫。

在MS SQL Server,你會發現不區分大小寫的表名,但在甲骨文不會:

create table "fred" (a integer) 
insert into "fred" values (1); 
select * from fred 
[S0002][unixODBC][Oracle][ODBC][Ora]ORA-00942: table or view does not exist 
select * from "fred" 
+-----------------------------------------+ 
| A          | 
+-----------------------------------------+ 
| 1          | 
+-----------------------------------------+ 
select * from "FRED" 
[S0002][unixODBC][Oracle][ODBC][Ora]ORA-00942: table or view does not exist 

什麼甲骨文實際上做的是大寫不帶引號的表名:

SQL> create table fred (a integer) 
SQLRowCount returns -1 
SQL> insert into fred values (1) 
SQLRowCount returns 1 
SQL> select * from fred 
+-----------------------------------------+ 
| A          | 
+-----------------------------------------+ 
| 1          | 
+-----------------------------------------+ 
SQLRowCount returns -1 
1 rows fetched 
SQL> select * from "FRED" 
+-----------------------------------------+ 
| A          | 
+-----------------------------------------+ 
| 1          | 
+-----------------------------------------+ 
SQLRowCount returns -1 
1 rows fetched 
SQL> select * from "fred" 
[S0002][unixODBC][Oracle][ODBC][Ora]ORA-00942: table or view does not exist 

同樣適用模擬和編目名稱。看看SQLGetInfo,你會看到驅動程序可以告訴你的是什麼。查找SQL_IDENTIFIER_CASE和SQL_IDENTIFIER_QUOTE_CHAR。

http://msdn.microsoft.com/en-us/library/ms711681(v=vs.85).aspx

注意到了「因爲在SQL-92標識符是從來沒有區分大小寫,作爲支持該嚴格遵循SQL-92(任何級別)的驅動器將永遠不會返回SQL_IC_SENSITIVE選項。」