我可以访问命令行 isql,并且我喜欢获取给定数据库的所有表的元数据,可能在格式化文件中。我怎样才能做到这一点?
谢谢。
检查sysobjects和syscolumns表。
这是 Sybase 系统表的示意图。
所有用户表的列表:
SELECT * FROM sysobjects WHERE type = 'U'
您可以将“U”更改为其他对象:
表中的列列表:
SELECT sc.*
FROM syscolumns sc
INNER JOIN sysobjects so ON sc.id = so.id
WHERE so.name = 'my_table_name'
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 中的每个用户定义的数据类型及其名称、存储类型、长度、是否允许空值以及绑定到它的任何默认值或规则。该报告还指出是否为表或视图定义了任何主键或外键列。
Sybase 智商:
describe table_name;
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'
您可以使用以下方法在数据库中的所有表中搜索列:
SELECT so.name
FROM sysobjects so
INNER JOIN syscolumns sc ON so.id = sc.id
WHERE sc.name = 'YOUR_COLUMN_NAME'
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
sp_tables
也可以在 isql 中工作。它为您提供当前数据库中的表列表。
如果您想使用命令行程序,但不限于使用 SQL,则可以使用SchemaCrawler。SchemaCrawler 是开源的,可以生成纯文本、CSV 或 (X)HTML 格式的文件。
这是获取元数据的不同方法。这个非常有用的 SQL 命令以文本形式返回表/视图定义:
SELECT text FROM syscomments WHERE id = OBJECT_ID('MySchema.MyTable') ORDER BY number, colid2, colid
享受帕特里克
在我使用的 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
对于 Sybase ASE,sp_columns table_name 将返回您要查找的所有表元数据。
如果 Sybase 符合 SQL-92,则此信息存储在 INFORMATION_SCHEMA 表中。
因此,以下将为您提供任何符合 SQL-92 的数据库中的表和视图的列表
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES