2017-05-05 48 views
0

Teradataの特定のテーブルのプライマリキー(インデックスではない)のリストを取得する方法は?TeradataのテーブルのPKのリストを取得

私はテーブル

CREATE MULTISET TABLE TBL_TEMPORAL_TRANSACTTIME 
( 
    ParID int not null, 
    DataSourceTypeCd VARCHAR(10) not null, 
    TxnPrd PERIOD(TIMESTAMP(6) WITH TIME ZONE) TITLE 'Transaction Period' NOT NULL AS TRANSACTIONTIME, 
    PRIMARY KEY(ParID, DataSourceTypeCd) 
) PRIMARY INDEX (ParID); 

を作成していると私は、だから私は「ParID」と「DataSourceTypeCd」の列を取得するプライマリキー の列を返すために、いくつかのクエリを必要としています。 誰でも助けてくれますか?

私は

SELECT * 
FROM DBC.IndicesV 
WHERE TABLENAME='TBL_TEMPORAL_TRANSACTTIME' 
    AND IndexType = 'K' 
; 

をしようとしたが、それは私に空の結果を提供します。

SELECT IndexType, ColumnName, UniqueOrPK 
FROM DBC.IndicesV 
WHERE TABLENAME='TBL_TEMPORAL_TRANSACTTIME'; 

戻り値:

IndexType ColumnName UniqueOrPK 
P ParID 
J ParID K 
J TxnPrd K 
J DataSourceTypeCd K 
+1

UniqueOrPK列を見ましたか? –

+0

私は一時的なテーブルに対して同じ動作をします。 – Andrew

+0

一時テーブルに2つのPKカラム+ TRANSACTIONTIMEカラムがある 'J 'インインデックスがあるようです。また、PrimaryKeyであるという情報も、UniqueOrPKフィールドに移動しました。 PKを使って一時的に制限を実装する特殊なケースのように見えます。 Btw。別のジョイン・インデックスを追加しようとすると、「ジョイン・インデックスDDLでエラーが発生します。現在のジョイン・インデックスにはTransactionTimeカラムが含まれていません。」 – ULick

答えて

0

のTeradata 15.10ドキュメント。データディクショナリ、第3章:ビューリファレンス、トピックIndicesV [X](ページ164)、見出しIndexTypeは、IndexTypeの値Kが主キーを反映すると述べています。

だから、次はあなたにPK列を与える:

SELECT ColumnName 
FROM DBC.IndicesV 
WHERE TABLENAME='TBL_TEMPORAL_TRANSACTTIME' 
     AND IndexType = 'K' 
; 

そのあなたはまた、あなたのテーブルについてより具体的にAND DatabaseName = 'YourDBName'を追加することをお勧めします。

+0

私はこの変種を試しましたが、正しい結果が得られません。空の結果セットを返します。私はまた、TBL_TEMPORAL_TRANSACTTIMEテーブルのDBC.IndicesVに格納されているものを見てきましたが、IndexTypesはPとJです。 –

+0

それは私のために働いています。私は時間部分を除いて正確なDDLをテストしました。 – xenodevil

+0

更新された質問の説明をご覧ください。多分問題は時間的な部分にあるのでしょうか?私はまた、時間外のテーブルをチェックして、それはまた私のために働く –

関連する問題