2012-10-17 35 views
1

我创建了下面两个表,只有不同的情况下:如何访问DB2中具有相同名称不同的情况下,表

tables.sql:

CREATE TABLE T1 (C1 INTEGER); 
INSERT INTO T1 VALUES (1); 
CREATE TABLE "t1" (C1 INTEGER); 
INSERT INTO "t1" VALUES (2); 
CREATE TABLE T2 (C1 INTEGER, "c1" integer); 
INSERT INTO T2 VALUES (3, 4); 

命令

db2 -tvf tables.sql 

当我想直接从CLP查询表,我无法区分这两种情况。我如何做一个查询到表T1和另一个到表t1。两列C1和C1都一样吗?

+2

不用说,这是一个很好的例子,为什么你不应该使用这种方式命名表。事实上,任何时候你必须划分表名(例如,如果它们包含空格,或者是保留字),你可能做错了什么。 –

+0

是的,这是真的,并且在使用多数据库的DDL时可能会发生这种情况,因为它们中的一些包含引号,DB2以不同的方式理解它们。 – AngocA

回答

1

为了从Windows CLP查询这些表,你要做的:

对于表T1(最简单的一种):

db2 select * from T1 

或(这是在Linux上的方式,因为在*)

db2 "select * from T1" 

对于表T1

db2 "select * from ""t1""" 

对于列类似于

db2 select C1 from T2 

对于其他

db2 "select ""c1"" from T2" 

确保整个命令涉及的报价。如果你发出这个命令:

db2 select ""c1"" from T2 

它会返回C1。对于此命令相同:

db2 select * from ""t1"" 

返回T1。

+0

我认为,这应该适用于从SQC文件或SQLJ文件中的嵌入式SQL发出SQL时。 – AngocA

+0

它也可以工作:db2 select * from“”“t1”“”(三次引号) – AngocA

0

如果您在Linux shell上使用CLP,shell将解释引号并将其去掉。在Linux/Unix上,用反斜线标出转义引号

db2 "INSERT INTO \"t1\" VALUES (...)" 
相关问题