2009-04-06 8 views

答えて

17

SYSCOLUMNSは、列のメタデータを保持していません。

select * from syscolumns where name =;

SYSCOLUMNSのidカラムはsysobjectsに、列のテーブルのIDです。

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

+1

おかげでこれをテスト!はい、これは実際に役立ちます。私はまた、あなたの答えを可視化するのSybase ASEの図を見つけた:、Sybaseの1の以降のバージョンで http://download.sybase.com/pdfdocs/asg1250e/poster.pdf –

+6

はsysobjectsの代わりにSYSTABLES – brianegge

+0

を使用する必要があり、私が選択してみました* syscolumnsからテーブルの列のどれも表示されません –

3

を使用します、私はそれを動作させるためにいくつかの小さな変更をしなければならなかった:

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 
+0

私はあなたがb.nameを意味すると思います! 'bar' – karakfa

+0

これは私の場合に働いた唯一の答えです。 – user1477388

0

あなたは、任意の列の情報を見つけることができます。

SELECT * 
    FROM sys.syscolumns 

あなたは何をテーブルに知りたい場合は、列が属する:

SELECT cname, tname 
    FROM sys.syscolumns 
WHERE tname IN ('col_1', 'col_2') 

注:私は、Sybase ASAで9

関連する問題