【问题标题】:How do I look at column metadata in Sybase?如何查看 Sybase 中的列元数据?
【发布时间】:2010-10-17 21:51:34
【问题描述】:

我有一个同事给我的列列表,但这些列位于数据库的不同表中。 Sybase 中是否有某种工具可以查询列所属的表?

(我已经尝试用谷歌搜索这种工具,但到目前为止没有运气)

【问题讨论】:

    标签: metadata sybase sap-ase


    【解决方案1】:

    syscolumns 保存列元数据。

    select * from syscolumns where name = ;

    syscolumns中的id列是该列的表的id,在sysobjects中;

    select b.name as tablename, a.name as columnname
    from syscolumns a join systables b on (a.id = b.id) 
    where b.type='U' and b.name = 'foo';
    

    获取名为“foo”的表的所有列。 type = 'U' 将其限制为用户表。

    select b.name as tablename, a.name as columnname
    from syscolumns a join systables b on (a.id = b.id) 
    where b.type='U' and a.name = 'foo';
    

    获取所有名为“foo”的列。

    大多数当前版本的 ASE 将使用 sysbojects 而不是 systables

    【讨论】:

    • 谢谢!是的,这实际上有帮助。我还找到了一张 Sybase ASE 图表,可以将您的答案可视化:download.sybase.com/pdfdocs/asg1250e/poster.pdf
    • 在更高版本的 Sybase 中需要使用 sysobjects 而不是 systables
    • 我尝试从 syscolumns 中选择 *,但我的表格中没有一个列显示
    • 如果您已经知道表名 sp_help tableName 将提供包括列名在内的表详细信息。
    【解决方案2】:

    我必须做一些小改动才能让它工作:

    select  b.name as tablename, 
            a.name as columnname
    from    dbo.syscolumns a 
    join    sysobjects     b on a.id = b.id
    where   b.type='U' 
    and     upper(a.name) like '%FOO%'      -- wildcard search for column name
    and     b.name = 'bar'                  -- exclude tables
    order by b.name
    

    【讨论】:

    • 我猜你的意思是 b.name != 'bar'
    【解决方案3】:

    您可以在以下位置找到任何列的信息:

    SELECT * 
      FROM sys.syscolumns
    

    如果你想知道一列属于哪个表:

    SELECT cname, tname 
      FROM sys.syscolumns
     WHERE tname IN ('col_1', 'col_2')
    

    注意:我在 Sybase ASA 9 中对此进行了测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-16
      • 2012-11-07
      • 2011-11-23
      • 2020-07-23
      • 1970-01-01
      • 2014-08-26
      • 1970-01-01
      • 2011-06-02
      相关资源
      最近更新 更多