【问题标题】:How to get primary keys for all tables in Sybase如何获取 Sybase 中所有表的主键
【发布时间】:2015-01-30 12:28:30
【问题描述】:

我需要从 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

这里的任何人都可以帮我对所需的表进行必要的连接,以获得指示其主键状态的所需标志。我已经浏览了 syskeyssysindexes 表格文档,但无法找到对我的目的有益的状态。

【问题讨论】:

标签: sql sybase sap-ase data-dictionary


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-14
    • 2022-12-17
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 2011-01-21
    • 2015-03-02
    • 1970-01-01
    相关资源
    最近更新 更多