正在尝试设置一个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,它具有的每个外键以及每个唯一键(不是一个键具有多个元素(例如上面的唯一键)的地方,是通过具有相同的PK来标识的。键号)。
我猜我需要使用sysobject,syscolumns,syskeys和sysconstraints,但我似乎无法弄清楚它们如何相互链接。
这是一个开始:
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'