我正在尝试设置一个Sybase查询,它将为我提供以下输出:
Table KeyType KeyNumber Column
table1 PK 1 table1_id
table1 FK 2 table2_id
table1 FK 3 table3_id
table1 FK 4 table4_id
table1 Unique 5 table1_abc
table1 Unique 5 table1_def
换句话说,我需要每个表的PK,以及它拥有的每个外键,以及每个唯一键(不是键具有多个元素的位置,例如上面的唯一键,这是由具有相同的KeyNumber。)
我猜我需要使用sysobject,syscolumns,syskeys和sysconstraints,但我似乎无法弄清楚它们是如何相互链接的。
感谢
卡尔
答案 0 :(得分:3)
这是一个开始:
SELECT
t.name,
CASE k.type
WHEN 1 THEN 'PK'
WHEN 2 THEN 'FK'
WHEN 3 THEN 'Common'
END,
c.name
FROM
sysobjects t INNER JOIN
syscolumns c ON c.id = t.id INNER JOIN
syskeys k ON k.id = t.id AND c.colid IN (k.key1, k.key2, k.key3, k.key4, k.key5, k.key6, k.key7, k.key8)
WHERE
t.type = 'U' AND k.type in (1,2)
它不包含密钥ID,因为我猜你可以以某种方式散列非空表ID和keyN列以产生密钥的唯一ID。
它也不包含唯一索引。为此,您希望UNION
包含以下内容:
SELECT
t.name,
'Unique',
c.name
FROM
sysobjects t INNER JOIN
syscolumns c ON c.id = t.id INNER JOIN
sysindexes i ON i.id = t.id
WHERE t.type = 'U'