2009-04-06 21 views
7

J'ai une liste de colonnes qu'un collaborateur m'a donnée, mais ces colonnes résident dans différentes tables de la BD. Existe-t-il une sorte d'outil dans Sybase où je peux interroger la table à laquelle appartient une colonne?Comment puis-je regarder les métadonnées de colonne dans Sybase?

(je l'ai essayé Google-ing pour ce genre d'outil, mais pas de chance jusqu'à présent)

Répondre

17

syscolumns détient les métadonnées de colonne.

Sélectionnez * à partir de syscolumns où name =;

La colonne id dans syscolumns est l'ID de la table de la colonne, dans 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'; 

obtient toutes les colonnes de la table nommée 'foo'. Le type = 'U' le limite aux tables utilisateur.

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'; 

obtient toutes les colonnes nommées 'foo'.

version la plus récente de l'ASE utilisera sysbojects au lieu de systables

+1

Merci! Oui, cela aide réellement. J'ai également trouvé un diagramme de Sybase ASE qui visualise votre réponse: http://download.sybase.com/pdfdocs/asg1250e/poster.pdf –

+6

Dans une version plus récente de Sybase, il faut utiliser sysobjects au lieu de systables – brianegge

+0

J'ai essayé de sélectionner * à partir de syscolumns et aucune des colonnes de mes tables n'apparaissent –

3

je devais faire quelques petits changements pour que cela fonctionne:

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

Je suppose que vous vouliez dire b.name! = 'Bar' – karakfa

+0

C'est la seule réponse qui a fonctionné dans mon cas. – user1477388

0

Vous pouvez trouver les informations pour une colonne:

SELECT * 
    FROM sys.syscolumns 

Si vous voulez savoir à quelle table une colonne appartient:

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

NOTE: Je teste ceci dans Sybase ASA 9.