32

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

谢谢。

4

12 回答 12

69

检查sysobjectssyscolumns表。

是 Sybase 系统表的示意图。

所有用户表的列表:

SELECT * FROM sysobjects WHERE type = 'U'

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

  • C – 计算列
  • D - 默认
  • F - SQLJ 函数
  • L - 日志
  • N - 分区条件
  • P – Transact-SQL 或 SQLJ 过程
  • PR – 准备对象(由动态 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'
于 2009-09-15T22:17:18.993 回答
50

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

仍然引用在数据库对象上使用 sp_help

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

于 2009-09-15T22:19:14.267 回答
7

Sybase 智商:

describe table_name;
于 2014-12-17T16:37:42.423 回答
5
     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'
于 2015-02-21T00:36:43.277 回答
2

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

SELECT so.name 
FROM sysobjects so
INNER JOIN syscolumns sc ON so.id = sc.id 
WHERE sc.name = 'YOUR_COLUMN_NAME'
于 2011-02-22T10:10:33.620 回答
2

When finding user table, in case if want the table owner name also, you can use the following:

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
于 2013-09-27T18:23:24.440 回答
1

sp_tables也可以在 isql 中工作。它为您提供当前数据库中的表列表。

于 2010-03-18T18:35:21.017 回答
0

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

于 2009-09-27T02:25:21.863 回答
0

这是获取元数据的不同方法。这个非常有用的 SQL 命令以文本形式返回表/视图定义:

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

享受帕特里克

于 2013-10-25T19:10:17.663 回答
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
于 2017-10-03T16:00:04.660 回答
0

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

于 2019-05-13T12:33:17.347 回答
-2

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

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

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
于 2009-09-15T22:18:55.980 回答