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 je peux y arriver?
Merci.
Vérifiez sysobjects et syscolumns tables.
Ici est un diagramme des tables système Sybase.
Liste de toutes les tables utilisateur:
SELECT * FROM sysobjects WHERE type = 'U'
Vous pouvez changer 'U' en d'autres objets:
Liste des colonnes dans un tableau:
SELECT sc.*
FROM syscolumns sc
INNER JOIN sysobjects so ON sc.id = so.id
WHERE so.name = 'my_table_name'
sp_help
est ce que vous recherchez.
Dans la documentation en ligne Sybase sur la procédure sp_help system:
La 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 [objname]
[...]
Voici la sortie (partielle) de la table publishers (collée à partir de 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. Chaque type de données défini par l'utilisateur dans les types de système ainsi que son nom, le type de stockage, la longueur, si les valeurs NULL sont autorisées, ainsi que les valeurs par défaut ou les règles qui y sont liées sont également indiqués. 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'
Lors de la recherche de la 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
sp_tables
fonctionnera également dans isql. Il vous donne la liste des tables de la base de données actuelle.
Dans la version de Sybase que j’utilise, voici la liste des colonnes du tableau sélectionné.
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
Voici une approche différente pour obtenir des métadonnées . Cette commande SQL très utile vous renvoie la définition de la table/vue sous forme de texte:
SELECT text FROM syscomments WHERE id = OBJECT_ID ('MySchema.MyTable') ORDER BY numéro, colid2, colid
Profitez Patrick
Si vous souhaitez utiliser un programme de ligne de commande sans être limité à l'utilisation de SQL, vous pouvez utiliser SchemaCrawler . SchemaCrawler est open source et peut générer des fichiers au format texte, CSV ou (X) HTML.