2017-05-05 67 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

请参阅更新的问题描述。也许问题在于时间部分?我也检查过无时间表,它也适用于我 –