Это начало:
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)
Он не включает идентификатор ключа, для этого, я думаю, вы могли бы как-то хэшировать непустой идентификатор таблицы и столбцы keyN, чтобы получить уникальный идентификатор для ключа.
Также не включает уникальные индексы. Для этого вы хотите 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'
Посетите страницу руководства Sybase для sysindexes о том, как его фильтровать.