2017-05-05 49 views
0

如何獲得主鍵(非指數)爲特定的表中的Teradata的名單?獲得PK的名單表中的Teradata

我創建表

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

它看起來像態表得到了與兩PK列+的TRANSACTIONTIME列'J'oin指數。而且它也是PrimaryKey的信息已經轉移到了UniqueOrPK字段。看起來像是一個特殊的情況,用PK實施限制。順便說一句。如果您嘗試添加另一個連接索引,你會得到「在連接索引DDL,連接索引不包括TRANSACTIONTIME列的當前形式的錯誤。」 – ULick

回答

0

Teradata的15.10文檔;數據字典,第3章:視圖引用,主題IndicesV [X](頁164),標題索引類型指出值爲K IndexType反映主鍵。

所以下面會給你的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

請參閱更新的問題描述。也許問題在於時間部分?我也檢查過無時間表,它也適用於我 –