如何获取Sybase表的列名、数据类型和按顺序排列?

13

我的 Sybase 数据库中有多个表格。我想知道给定表格(如 myOrder 表格)的列名称和数据类型。我该怎么做?我在 stackoverflow 上找到了下面的脚本,但是这给我带来了异常“syscolumns 是不明确的”。以下是我用于此目的的脚本:

From a Sybase Database, how I can get table description ( field names and types)?

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

15

我正在使用以下查询来提取类型:

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
@mega,是否可能在syscolumns中有一个条目,而在sysobjects中没有相应的条目? - www
这里的问题不在于对象,而在于类型。Sybase列可以是Java类的类型,由xtype成员定义。您错误地确定了列的类型,因此失去了它们。我在上面举了一个例子。此外,当您想获取列时请求对象是错误的,这是一个逻辑错误。 - mega
此查询未返回所有列。请检查 @mega 的响应。 - SilvioQ

13

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

sp_columns table_name

4
要在Sybase中获取表的列名、数据类型和更多信息,请使用以下查询语句。
Select * from systabcol
key join systab
 where table_name = 'your_table_name'

2
仅作为一个有用的补充,我使用Sybase的SQL Anywhere 12,因此syscolumns对象(视图)与其他版本的Sybase不具有相同的信息,因此需要连接命名信息。然而,这个被称为“合并视图”的综合视图本身几乎完全能够胜任(请查看其文档)。
实际上,我们将其用于检查所有表中列的更改,作为QA工具,类似于以下内容:
Select * 
    From sys.syscolumns 
    Where (cname Like '%trk%' Or cname Like '%track%') 
    And cname not like '%ontrack%' 
    Order By tname;

1
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接