您如何判断DB2中的表是否具有主键?


9

我们正在使用一种工具,该工具要求DB2数据库中的特定表具有定义的主键。

有没有一种方法可以在数据库上使用select语句来查看给定表是否包含一个表?

谢谢。

Answers:


10

免责声明:我不知道DB2。

我只是用“ db2表定义”对它们进行了搜索。

资源:

SELECT * 
FROM SYSIBM.SYSTABLES TAB,SYSIBM.SYSCOLUMNS COL 
WHERE TAB.CREATOR = COL.TBCREATOR 
AND TAB.CREATOR = 'xxxx' 
AND TAB.NAME = 'xxxxxxxxxxxxx' 
AND TAB.NAME = COL.TBNAME 
AND TAB.TYPE = 'V' ( OR 'T' ) 
ORDER BY 1,2;

资源:

SELECT * FROM syscat.tabconst WHERE type = 'P';

1
TAB.TYPE ='V'将为您提供视图,我相信您不希望这样做。将TAB.TYPE ='T'用于表。
GilShalit 2012年


0

这可能是最简单的选择,因为匹配索引支持主键:

select COLNAMES from SYSIBM.SYSINDEXES where tbname = 'TABLE' and uniquerule = 'P';

您还可以查询列目录表:

select NAME from SYSIBM.SYSCOLUMNS where tbname = 'TABLE' and keyseq > 0 order by keyseq;

2
主键不是索引(尽管它由一个索引支持)。
mustaccio 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.