2011-08-10 48 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选项。”