À partir d'une base de données Sybase, comment puis-je obtenir une description de table (noms et types de champs)?

StackOverflow https://stackoverflow.com/questions/1429898

Question

J'ai accès à la ligne de commande isql et j'aime bien obtenir des méta-données de toutes les tables d'une base de données donnée, éventuellement dans un fichier formaté. Comment puis-je y parvenir?

Merci.

Était-ce utile?

La solution

Vérifiez sysobjects et syscolumns tableaux.

Ici est un diagramme des tables système Sybase.

Liste de toutes les tables utilisateur:

SELECT * FROM sysobjects WHERE type = 'U'

Vous pouvez remplacer "U" par d'autres objets:

  • C - colonne calculée
  • D - défaut
  • F - Fonction SQLJ
  • L - journal
  • N - condition de la partition
  • P - Procédure Transact-SQL ou SQLJ
  • PR - prépare des objets (créés par SQL dynamique)
  • R - règle
  • RI - contrainte référentielle
  • S - table système
  • TR - déclencheur
  • U - table utilisateur
  • V - afficher
  • XP - Procédure stockée étendue

Liste des colonnes d'un tableau:

SELECT sc.* 
FROM syscolumns sc
INNER JOIN sysobjects so ON sc.id = so.id
WHERE so.name = 'my_table_name'

Autres conseils

sp_help est ce que vous recherchez.

Extrait de la documentation en ligne Sybase sur sp_help , procédure système:

  

Description

     

Rapporte des informations sur un objet de base de données (tout objet répertorié dans sysobjects) et sur les types de données système ou définis par l'utilisateur, ainsi que sur les colonnes calculées et les index basés sur des fonctions. La colonne affiche optimistic_index_lock .

     

Syntaxe

     

sp_help [nomobjet]

     

[...]

Voici la sortie (partielle) de la table des éditeurs (collée depuis Utilisation de sp_help sur des objets de base de données ):

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

Toujours en train de citer Utilisation de sp_help sur des objets de base de données :

  

Si vous exécutez sp_help sans fournir de nom d'objet, le rapport résultant affiche chaque objet dans sysobjects, ainsi que son nom, son propriétaire et son type d'objet. On voit également chaque type de données défini par l'utilisateur dans les types de système, ainsi que son nom, son type de stockage, sa longueur, si les valeurs NULL sont autorisées et les valeurs par défaut ou règles qui lui sont associées. Le rapport indique également si des colonnes de clé primaire ou étrangère ont été définies pour une table ou une vue.

Sybase IQ:

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'

Vous pouvez rechercher une colonne dans toutes les tables de la base de données en utilisant:

SELECT so.name 
FROM sysobjects so
INNER JOIN syscolumns sc ON so.id = sc.id 
WHERE sc.name = 'YOUR_COLUMN_NAME'

sp_tables fonctionnera également dans isql. Il vous donne la liste des tables de la base de données actuelle.

Lors de la recherche d'une table utilisateur, si vous souhaitez également nommer le propriétaire de la table, vous pouvez utiliser les éléments suivants:

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

Si vous souhaitez utiliser un programme de ligne de commande sans utiliser SQL, vous pouvez utiliser SchemaCrawler . SchemaCrawler est open source et peut générer des fichiers au format texte, CSV ou (X) HTML.

Voici une approche différente pour obtenir des métadonnées. Cette commande SQL très utile vous renvoie la définition de table / vue sous forme de texte:

SÉLECTIONNER LE texte DE SYSCOMMENTS WHERE id = OBJECT_ID ('MySchema.MyTable') ORDER BY number, colid2, colid

Profitez Patrick

Dans la version Sybase que j’utilise, voici la liste des colonnes de la table sélectionnée

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

Pour Sybase ASE, sp_columns nom_table renverra toutes les métadonnées de table que vous recherchez.

Si Sybase est conforme à SQL-92, ces informations sont stockées dans les tables INFORMATION_SCHEMA.

Ce qui suit vous donnera une liste de tables et de vues dans n’importe quelle base de données compatible SQL-92

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top