如何获取 sybase 表列名及其数据类型和顺序?

Posted

技术标签:

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

我的 sybase 数据库中有多个表。我想知道给定表的列名和数据类型,例如(myOrder 表)。我怎样才能做到这一点?下面是我在 *** 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'

【问题讨论】:

【参考方案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

【讨论】:

以上是关于如何获取 sybase 表列名及其数据类型和顺序?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Blob 中的 CSV 文件在 SQL 数据库中创建一个表,其中包含通过数据流或 ADF 管道的所有列名及其数据类型?

请教sql语句如何取得一个表中的列名,数据类型,及长度?

如何在 Sybase 中获取正确的列类型

mysql查询表的列名,顺序不对?

如何从 sqlalchemy 中的 session/engine/meta 获取表名及其数据类型?

如何查看数据库中的表?