【发布时间】:2017-10-03 19:43:35
【问题描述】:
如何获取 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
【问题讨论】:
-
你看过UniqueOrPK一栏吗?
-
我在时态表中得到相同的行为。
-
看起来临时表有一个
Join 索引,其中包含两个 PK 列 + TRANSACTIONTIME 列。并且它也是 PrimaryKey 的信息已移动到字段 UniqueOrPK。看起来像是在 PK 中实施限制的特殊情况。顺便提一句。如果您尝试添加另一个连接索引,则会收到“连接索引 DDL 中的错误,连接索引的当前形式不包括 TransactionTime 列。” -
@Rob Paller,我选择了 UnoqueOrPK 列,但信息对我没有帮助。或许还有什么其他的方法可以获取PK信息?
-
如果你定义一个主键,你定义它是唯一的。如果表是临时表,则它始终可能包含多行具有该“唯一”键但 transactiontime 列中的值不同的行。为了满足唯一性要求,事务时间列将添加到您定义的 KEY 中。如果您从时态表中选择,您将获得行的当前版本,因为它是默认值。但其他事务时间不同的行仍在表中。
标签: sql select primary-key teradata