我有一个同事给我的列列表,但这些列位于数据库的不同表中。Sybase 中是否有某种工具可以查询列所属的表?
(我试过用谷歌搜索这种工具,但到目前为止还没有运气)
syscolumns 保存列元数据。
select * from syscolumns where name = ;
syscolumns 中的 id 列是该列的表的 id,在 sysobjects 中;
select b.name as tablename, a.name as columnname
from syscolumns a join systables b on (a.id = b.id)
where b.type='U' and b.name = 'foo';
获取名为“foo”的表的所有列。type = 'U' 将其限制为用户表。
select b.name as tablename, a.name as columnname
from syscolumns a join systables b on (a.id = b.id)
where b.type='U' and a.name = 'foo';
获取所有名为 'foo' 的列。
大多数当前版本的 ASE 将sysbojects
使用systables
我必须进行一些小改动才能使其正常工作:
select b.name as tablename,
a.name as columnname
from dbo.syscolumns a
join sysobjects b on a.id = b.id
where b.type='U'
and upper(a.name) like '%FOO%' -- wildcard search for column name
and b.name = 'bar' -- exclude tables
order by b.name
您可以在以下位置找到任何列的信息:
SELECT *
FROM sys.syscolumns
如果您想知道列属于哪个表:
SELECT cname, tname
FROM sys.syscolumns
WHERE tname IN ('col_1', 'col_2')
注意:我在 Sybase ASA 9 中对此进行了测试。