从Sybase数据库,我如何获取表描述(字段名称和类型)?

时间:2009-09-15 22:12:28

标签: sql metadata sybase sybase-ase isql

我可以访问命令行isql,我喜欢获取给定数据库的所有表的元数据,可能是格式化文件。我怎么能做到这一点?

感谢。

12 个答案:

答案 0 :(得分:56)

检查sysobjectssyscolumns表。

Here是Sybase系统表的图表。

所有用户表的列表:

SELECT * FROM sysobjects WHERE type = 'U'

您可以将“U”更改为其他对象:

  • C - 计算列
  • D - 默认
  • F - SQLJ函数
  • L - log
  • N - 分区条件
  • P - Transact-SQL或SQLJ过程
  • PR - 准备对象(由Dynamic SQL创建)
  • R - 规则
  • RI - 参考约束
  • S - 系统表
  • TR - 触发器
  • U - 用户表
  • V - 查看
  • XP - 扩展存储过程

表格中的列列表:

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

答案 1 :(得分:43)

sp_help正是您正在寻找的。

来自sp_help系统过程的Sybase在线文档:

  

<强>描述

     

报告有关数据库对象(sysobjects中列出的任何对象)以及系统或用户定义的数据类型以及计算列和基于函数的索引的信息。列显示 optimistic_index_lock

     

<强>语法

     

sp_help [objname]

     

[...]

以下是publishers表的(部分)输出(粘贴自Using sp_help on database objects):

Name               Owner        Object_type     Create_date 
----------------   -----------  -------------   ------------------------------
publishers         dbo          user table      Nov 9 2004 9:57AM

(1 row affected)
Column_name Type     Length   Prec  Scale   Nulls   Default_name   Rule_name
----------- -------  ------   ----- ------- ------- -------------- ---------- 
pub_id      char          4    NULL  NULL        0  NULL           pub_idrule
pub_name    varchar      40    NULL  NULL        1  NULL           NULL
city        varchar      20    NULL  NULL        1  NULL           NULL
state       char          2    NULL  NULL        1  NULL           NULL
Access_Rule_name    Computed_Column_object     Identity
------------------- -------------------------  ------------
NULL                NULL                                  0
NULL                NULL                                  0
NULL                NULL                                  0
NULL                NULL                                  0

仍然引用Using sp_help on database objects

  

如果在不提供对象名称的情况下执行sp_help,则生成的报告将显示sysobjects中的每个对象及其名称,所有者和对象类型。还显示了systypes中每个用户定义的数据类型及其名称,存储类型,长度,是否允许空值以及绑定到它的任何默认值或规则。该报告还指出是否已为表或视图定义了任何主键或外键列。

答案 2 :(得分:6)

Sybase IQ:

describe table_name;

答案 3 :(得分:4)

     SELECT
DB_NAME() TABLE_CATALOG,
NULL TABLE_SCHEMA,
so.name TABLE_NAME,
sc.name COLUMN_NAME,
sc.colid ORDINAL_POSITION,
NULL COLUMN_DEFAULT,
CASE WHEN st.allownulls=1 THEN 'YES'
 ELSE 'NO'
END IS_NULLABLE,
st.name DATA_TYPE,
CASE WHEN st.name like '%char%' THEN st.length
END CHARACTER_MAXIMUM_LENGTH,
CASE WHEN st.name like '%char%' THEN st.length
END*2 CHARACTER_OCTET_LENGTH,
CASE WHEN st.name in ('numeric','int') THEN st.length
END NUMERIC_MAXIMUM_LENGTH,
CASE WHEN st.name in ('numeric','int') THEN st.prec
END NUMERIC_PRECISION,
NULL NUMERIC_PRECISION_RADIX,
CASE WHEN st.name in ('numeric','int') THEN st.scale
END NUMERIC_SCALE,
CASE WHEN st.name in ('datetime') THEN st.prec
END DATETIME_PRECISION,
NULL CHARACTER_SET_CATALOG,
NULL CHARACTER_SET_SCHEMA,
NULL COLLATION_CATALOG,
NULL COLLATION_SCHEMA,
NULL DOMAIN_CATALOG,
NULL DOMAIN_SCHEMA,
NULL DOMAIN_NAME
FROM 
sysobjects so
INNER JOIN 
syscolumns sc
ON sc.id = so.id
inner join systypes st on st.usertype = sc.usertype 
WHERE so.name = 'TableName'

答案 4 :(得分:2)

您可以使用以下方法搜索数据库中所有表中的列:

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

答案 5 :(得分:1)

sp_tables也适用于isql。它为您提供当前数据库中的表列表。

答案 6 :(得分:1)

查找用户表时,如果还想要表所有者名称,可以使用以下内容:

select su.name + '.' + so.name
from   sysobjects so,
       sysusers   su
where  so.type = 'U' and
       so.uid  = su.uid
order  by su.name,
          so.name

答案 7 :(得分:0)

如果要使用命令行程序,但不限于使用SQL,则可以使用SchemaCrawler。 SchemaCrawler是开源的,可以生成纯文本,CSV或(X)HTML格式的文件。

答案 8 :(得分:0)

这里有一种获取元数据的不同方法。 这个非常有用的SQL命令将表/视图定义作为文本返回:

SELECT text FROM syscomments WHERE id = OBJECT_ID('MySchema.MyTable')ORDER BY number,colid2,colid

享受 帕特里克

答案 9 :(得分:0)

在我使用的Sybase版本中,以下列出了所选表的列

select *
FROM sys.syscolumns sc
where tname = 'YOUR_TABLE_NAME'
--and creator='YOUR_USER_NAME' --if you want to further restrict tables
--according to the user name that created it

答案 10 :(得分:0)

对于Sybase ASE,sp_columns table_name将返回您要查找的所有表元数据。

答案 11 :(得分:-1)

如果Sybase符合SQL-92,则此信息存储在INFORMATION_SCHEMA表中。

因此,以下内容将为您提供任何SQL-92兼容数据库中的表和视图列表

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES