0

在使用 DB2 时,我注意到一个奇怪的行为SYSIBM.SYSCOLUMNS,它只出现在一个表中。

这是我的查询:

select distinct NAME, COLTYPE, LENGTH, SCALE, REMARKS from SYSIBM.SYSCOLUMNS where  TBNAME='Table1';

通常结果显示每个表一次。

|===================================|
| NAME |COLTYPE|LENGTH|SCALE|REMARKS|
|col1  | ..... |......|.....|.......|
|col2  | ..... |......|.....|.......|
|col3  | ..... |......|.....|.......|
|===================================|

但是如果我使用一个特定的表,我们称之为它Table2,每列显示两次:

|===================================|
| NAME |COLTYPE|LENGTH|SCALE|REMARKS|
|col1  | ..... |......|.....|.......|
|col1  | ..... |......|.....|.......|
|col2  | ..... |......|.....|.......|
|col2  | ..... |......|.....|.......|
|col3  | ..... |......|.....|.......|
|col3  | ..... |......|.....|.......|
|===================================|

但前提是我REMARKS在选择语句中包含了。如果我REMARKS从我的选择中删除,一切都会按预期工作。

这个问题的原因可能是什么?我的查询有问题吗?

4

2 回答 2

5

您还没有考虑架构。架构 A 和架构 B 中可能有 table2。

在卢:

就个人而言,我推荐使用 syscat 模式来查询目录。sysibm 是 DB2 内部的,这些表可以在版本之间更改。

select TABSCHEMA, TABNAME, COLNAME, TYPENAME, LENGTH, SCALEREMARKS
from syscat.columns
where tabname = 'TABLE2'
于 2015-09-09T13:35:22.860 回答
1

每行的备注栏中有什么?

DISTINCT的原始查询中有一个。由于您只选择表名,因此您是否有可能在多个模式中拥有同一张表?一个有备注,一个没有?

于 2015-09-09T13:31:05.340 回答