【问题标题】:How to get sybase table column name and its datatype and order by?如何获取 sybase 表列名及其数据类型和顺序?
【发布时间】:2015-05-10 06:17:56
【问题描述】:

我的 sybase 数据库中有多个表。我想知道给定表的列名和数据类型,例如(myOrder 表)。我怎样才能做到这一点?下面是我在 stackoverflow From a Sybase Database, how I can get table description ( field names and types)? 上找到的脚本。但这给了我例外syscolumns is ambiguous?该脚本低于我用于此的脚本。

SELECT sc.* 
FROM syscolumns sc
INNER JOIN sysobjects so ON sc.id = so.id
WHERE so.name = 'my_table_name'

【问题讨论】:

    标签: database sybase


    【解决方案1】:

    要提取我正在使用此类查询的类型:

    SELECT syscolumns.name, systypes.name FROM sysobjects 
    JOIN syscolumns ON sysobjects.id = syscolumns.id
    JOIN systypes ON systypes.type = syscolumns.type AND systypes.usertype = syscolumns.usertype
    WHERE sysobjects.name LIKE 'my_table' 
    

    【讨论】:

    • 这是错误的。您不是以这种方式加载所有列。例如,尝试查询 sysobjects 表的列并与 Sybase Central 进行比较。 JOIN 必须是“LEFT JOIN”。
    • @mega 是否有可能在 syscloumns 中有一个在 sysobjects 中没有条目的条目?
    • 这里的问题不在于对象,而在于类型。 Sybase 列可以是 Java 类的类型,由 xtype 成员定义。您错误地确定了列的类型,因此您丢失了它们。我在上面举了一个例子。另外,想获取列的时候请求对象是错误的,这是一个逻辑错误。
    • 此查询不会返回所有列。检查@mega 响应。
    【解决方案2】:

    要获取 Sybase 中表的列名、数据类型和更多信息,请使用以下查询。

    Select * from systabcol
    key join systab
     where table_name = 'your_table_name'
    

    【讨论】:

      【解决方案3】:

      只是在这里添加一个希望有用的补充,我使用 Sybase 的 SQL Anywhere 12,因此 syscolumns 对象(视图)不包含与其他版本的 Sybase 相同的信息,因此需要加入命名信息。然而,这种统一的观点,正如它所称的那样,几乎完全可以靠自己(see it's documentation here)。

      我们实际上使用它来检查所有表中列的更改,作为一个 QA 工具,类似于:

      Select * 
          From sys.syscolumns 
          Where (cname Like '%trk%' Or cname Like '%track%') 
          And cname not like '%ontrack%' 
          Order By tname;
      

      【讨论】:

        【解决方案4】:

        您可以使用内置过程 sp_columns。它将返回给定表的所有表元数据,包括列名、数据类型、列长度等。

        sp_columns table_name
        

        【讨论】:

          【解决方案5】:

          Sybase Central 获取这样的列:

          select
              col.name,
              isnull(xt.xtname, isnull(get_xtypename(col.xtype, col.xdbid), t.name))
          from
              syscolumns col
          join
              sysobjects obj
          on
              col.id = obj.id
          left outer join
              systypes t
          on
              col.usertype = t.usertype
          left outer join
              sysxtypes xt
          on
              col.xtype = xt.xtid
          where
              obj.name like 'sysobjects'
          order by
              col.colid
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2010-11-28
            • 2016-04-14
            • 1970-01-01
            • 2013-12-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多