代码之家  ›  专栏  ›  技术社区  ›  aartist

从Sybase数据库中,如何获取表描述(字段名和类型)?

  •  23
  • aartist  · 技术社区  · 17 年前

    我可以访问命令行isql,我喜欢获取给定数据库中所有表的元数据,可能是在格式化文件中。我怎么能做到?

    谢谢。

    11 回复  |  直到 9 年前
        1
  •  56
  •   Hend Lukasz Lysik    10 年前

    检查 sysobjects 和 syscolumns 桌子。

    Here 是Sybase系统表的图表。

    所有用户表的列表:

    SELECT * FROM sysobjects WHERE type = 'U'
    

    可以将“u”更改为其他对象:

    • C_“计算列
    • 违约
    • f_“sqlj函数
    • L测井
    • n_“分区条件
    • “Transact-SQL或SQLJ过程”
    • “准备对象”(由动态SQL创建)
    • R规则
    • 参考约束
    • 系统表
    • 触发器
    • 用户表
    • 视图
    • xp_“扩展存储过程

    表中的列列表:

    SELECT sc.* 
    FROM syscolumns sc
    INNER JOIN sysobjects so ON sc.id = so.id
    WHERE so.name = 'my_table_name'
    
        2
  •  42
  •   Pascal Thivent    17 年前

    sp_help 就是你要找的。

    来自Sybase在线文档 sp_help 系统程序:

    描述

    报告有关数据库对象(sysobjects中列出的任何对象)以及系统或用户定义的数据类型以及计算列和基于函数的索引的信息。列显示 乐观指数锁 .

    句法

    sp_help [objname]

    […]

    这是Publishers表(粘贴自)的(部分)输出 Using sp_help on database objects ):

    Name               Owner        Object_type     Create_date 
    ----------------   -----------  -------------   ------------------------------
    publishers         dbo          user table      Nov 9 2004 9:57AM
    
    (1 row affected)
    Column_name Type     Length   Prec  Scale   Nulls   Default_name   Rule_name
    ----------- -------  ------   ----- ------- ------- -------------- ---------- 
    pub_id      char          4    NULL  NULL        0  NULL           pub_idrule
    pub_name    varchar      40    NULL  NULL        1  NULL           NULL
    city        varchar      20    NULL  NULL        1  NULL           NULL
    state       char          2    NULL  NULL        1  NULL           NULL
    Access_Rule_name    Computed_Column_object     Identity
    ------------------- -------------------------  ------------
    NULL                NULL                                  0
    NULL                NULL                                  0
    NULL                NULL                                  0
    NULL                NULL                                  0
    

    仍然引用 对数据库对象使用sp_帮助 :

    如果在不提供对象名称的情况下执行sp_help,则生成的报告将显示sysobjects中的每个对象及其名称、所有者和对象类型。还显示了系统类型中的每个用户定义数据类型及其名称、存储类型、长度、是否允许空值以及绑定到该数据类型的任何默认值或规则。报告还注意到是否为表或视图定义了任何主键列或外键列。

        3
  •  6
  •   Sergey Zinyuk    11 年前

    Sybase智商:

    describe table_name;
    
        4
  •  3
  •   Kishore    11 年前
         SELECT
    DB_NAME() TABLE_CATALOG,
    NULL TABLE_SCHEMA,
    so.name TABLE_NAME,
    sc.name COLUMN_NAME,
    sc.colid ORDINAL_POSITION,
    NULL COLUMN_DEFAULT,
    CASE WHEN st.allownulls=1 THEN 'YES'
     ELSE 'NO'
    END IS_NULLABLE,
    st.name DATA_TYPE,
    CASE WHEN st.name like '%char%' THEN st.length
    END CHARACTER_MAXIMUM_LENGTH,
    CASE WHEN st.name like '%char%' THEN st.length
    END*2 CHARACTER_OCTET_LENGTH,
    CASE WHEN st.name in ('numeric','int') THEN st.length
    END NUMERIC_MAXIMUM_LENGTH,
    CASE WHEN st.name in ('numeric','int') THEN st.prec
    END NUMERIC_PRECISION,
    NULL NUMERIC_PRECISION_RADIX,
    CASE WHEN st.name in ('numeric','int') THEN st.scale
    END NUMERIC_SCALE,
    CASE WHEN st.name in ('datetime') THEN st.prec
    END DATETIME_PRECISION,
    NULL CHARACTER_SET_CATALOG,
    NULL CHARACTER_SET_SCHEMA,
    NULL COLLATION_CATALOG,
    NULL COLLATION_SCHEMA,
    NULL DOMAIN_CATALOG,
    NULL DOMAIN_SCHEMA,
    NULL DOMAIN_NAME
    FROM 
    sysobjects so
    INNER JOIN 
    syscolumns sc
    ON sc.id = so.id
    inner join systypes st on st.usertype = sc.usertype 
    WHERE so.name = 'TableName'
    
        5
  •  2
  •   MDn    15 年前

    可以使用以下命令搜索数据库中所有表中的列:

    SELECT so.name 
    FROM sysobjects so
    INNER JOIN syscolumns sc ON so.id = sc.id 
    WHERE sc.name = 'YOUR_COLUMN_NAME'
    
        6
  •  1
  •   Chris Morgan    16 年前

    sp_tables 也适用于ISQL。它提供当前数据库中的表列表。

        7
  •  1
  •   shanmugs    13 年前

    在查找用户表时,如果还需要表所有者名称,可以使用以下内容:

    select su.name + '.' + so.name
    from   sysobjects so,
           sysusers   su
    where  so.type = 'U' and
           so.uid  = su.uid
    order  by su.name,
              so.name
    
        8
  •  0
  •   Sualeh Fatehi    17 年前

    如果要使用命令行程序,但不限于使用SQL,则可以使用 SchemaCrawler . SchemaCrawler是开放源码的,可以生成纯文本、csv或(x)html格式的文件。

        9
  •  0
  •   Patrick Wolf    13 年前

    这里是获取元数据的另一种方法。 这个非常有用的SQL命令将表/视图定义返回为文本:

    从syscomments中选择文本,其中id=object_id('myschema.mytable')order by number,colid2,colid

    享受 帕特里克

        10
  •  0
  •   Orhan Celik    9 年前

    在我使用的Sybase版本中,下面给出了所选表的列列表

    select *
    FROM sys.syscolumns sc
    where tname = 'YOUR_TABLE_NAME'
    --and creator='YOUR_USER_NAME' --if you want to further restrict tables
    --according to the user name that created it
    
        11
  •  -1
  •   Steve Weet    17 年前

    如果Sybase与SQL-92兼容,则此信息存储在信息模式表中。

    因此,下面将为您提供任何符合SQL-92的数据库中的表和视图列表

    SELECT TABLE_NAME
    FROM INFORMATION_SCHEMA.TABLES
    
    推荐文章