Как получить первичные ключи для всех таблиц в Sybase

Мне нужно создать словарь данных из всех пользовательских таблиц в базе данных sybase ase. Я не могу установить такие инструменты, как Sybase PowerDesigner, поэтому мне нужно сделать это возможным с помощью SQL-запросов.

Я составил этот запрос, воспользовавшись помощью форумов, чтобы показать имя таблицы, имя столбца, тип данных, размер и ненулевое ограничение. Но я не могу определить, является ли столбец первичным ключом или нет, или является частью кластеризованного первичного ключа.

    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

Может ли кто-нибудь здесь помочь мне выполнить необходимое соединение с необходимыми таблицами, чтобы получить требуемый флаг, указывающий его статус первичного ключа. Я уже прошел через системные ключи и sysindexes, но я не могу найти, какой статус был бы полезен для моей цели.


person Manish    schedule 30.01.2015    source источник
comment
Это должно помочь stackoverflow.com/questions/4943420 /   -  person www    schedule 30.01.2015
comment
Есть ли причина, по которой вы не можете использовать ddlgen?   -  person Michael Gardner    schedule 30.01.2015


Ответы (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
person Hemant Patel    schedule 02.02.2015