我可以访问命令行isql,我喜欢获取给定数据库的所有表的元数据,可能是格式化文件。我怎么能做到这一点?
感谢。
答案 0 :(得分:56)
检查sysobjects和syscolumns表。
Here是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'
答案 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