Как получить первичные ключи для всех таблиц в Sybase
У меня есть требование создания словаря данных из всех пользовательских таблиц в базе данных sybase ase. Я не могу установить такие инструменты, как Sybase PowerDesigner, и поэтому я должен сделать это возможным с помощью запросов SQL.
Я составил этот запрос, воспользовавшись помощью форумов, чтобы показать имя таблицы, имя столбца, тип данных, размер, а не ограничение NULL. Но я не могу определить, является ли столбец Первичным ключом или нет, или является частью кластерного Первичного ключа.
SELECT O.name as "Table",
C.name as "Column",
C.length as "Length",
T.name as "Datatype",
C.status as "Allow Null",
CASE C.status
WHEN 8 THEN 'NULL'
WHEN 0 THEN 'NOT NULL'
END as "NULLS"
FROM sysobjects O,
syscolumns C,
systypes T
WHERE O.id = C.id
AND O.type = "U" -- user tables only
AND C.usertype = T.usertype
ORDER BY O.name, C.colid
Может ли кто-нибудь здесь помочь мне сделать необходимое объединение с необходимыми таблицами, чтобы получить требуемый флаг, указывающий его статус первичного ключа. Я уже просмотрел документацию по таблице syskeys и sysindexes, но не могу найти, какой статус там будет полезен для моих целей.
1 ответ
Пожалуйста, попробуйте ниже код:
SELECT O.name as "Table",
C.name as "Column",
C.length as "Length",
T.name as "Datatype",
C.status as "Allow Null",
CASE C.status
WHEN 8 THEN 'NULL'
WHEN 0 THEN 'NOT NULL'
END as "NULLS",
ISNULL((select "Y" as PK_FLAG from syskeys K where O.id=K.id
and K.type = 1 and (C.colid =K.key1 or C.colid =K.key2 OR C.colid =K.key3 OR C.colid =K.key4 OR C.colid =K.key5 OR C.colid =K.key6 OR C.colid =K.key7 Or C.colid =K.key8 )),"N") as Primary_Key_Flag
FROM sysobjects O,
syscolumns C,
systypes T
WHERE O.id = C.id
AND O.type = "U" -- user tables only
AND C.usertype = T.usertype
ORDER BY O.name, C.colid
Надеюсь, это поможет:)