Wie können Sie feststellen, ob eine Tabelle in DB2 einen Primärschlüssel hat?


9

Wir verwenden ein Tool, für das für bestimmte Tabellen in unserer DB2-Datenbank ein Primärschlüssel definiert sein muss.

Gibt es eine Möglichkeit, mithilfe einer select-Anweisung in der Datenbank festzustellen, ob eine bestimmte Tabelle eine hat?

Vielen Dank.

Antworten:


10

Haftungsausschluss: Ich kenne DB2 nicht.

Ich habe diese einfach mit "db2 table definition" gegoogelt.

Quelle:

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;

Quelle:

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

1
TAB.TYPE = 'V' gibt Ihnen Ansichten, die Sie meiner Meinung nach nicht wollen. Verwenden Sie TAB.TYPE = 'T' für Tabellen.
GilShalit

8

Sie können eine machen db2look, die Ihnen die ddls für die Tabelle gibt.

db2look -d db_name -e -x -z schema_name -t table_name

Willkommen bei dba.se und vielen Dank für diese hilfreiche Antwort. Ich hoffe, es macht Ihnen nichts aus, wenn meine Formatierung bearbeitet wird.
Jack sagt, versuchen Sie es mit topanswers.xyz

@ JackDouglas - danke für diese Änderungen, sieht jetzt ziemlich lesbar aus
Govind Kailas

0

Dies ist wahrscheinlich die einfachste Option, da ein Primärschlüssel von einem passenden Index unterstützt wird:

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

Sie können auch die Spaltenkatalogtabelle abfragen:

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

2
Der Primärschlüssel ist kein Index (obwohl er von einem unterstützt wird).
Mustaccio

0
  1. SYSCAT.INDEXES.UNIQUERULE (Wenn UNIQUERULE P ist, dann Primärschlüssel)
  2. SYSCAT.TABCONST.TYPE (wenn Typ P ist, dann Primärschlüsseleinschränkung)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.