Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何获取sybase表的列名及其数据类型和顺序?_Database_Sybase - Fatal编程技术网

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

Database 如何获取sybase表的列名及其数据类型和顺序?,database,sybase,Database,Sybase,我的sybase数据库中有多个表。我想知道给定表的列名和数据类型,比如(myOrder表)。我该怎么做?下面是我在stackoverflow上找到的脚本。但这给了我一个异常syscolumns是不明确的?下面是我用于此的脚本 SELECT sc.* FROM syscolumns sc INNER JOIN sysobjects so ON sc.id = so.id WHERE so.name = 'my_table_name' 要提取我正在使用的类型,请执行以下查询: SELECT sy

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

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

要提取我正在使用的类型,请执行以下查询:

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' 

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

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

为了在这里添加一个有用的补充,我使用了Sybase的SQLAnywhere 12,因此syscolumns对象(视图)与Sybase的其他版本不包含相同的信息,因此需要加入命名信息。然而,这种被称为“整合视图”的视图本身几乎完全可以()

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

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

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

sp_columns table_name

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

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