Quelques requetes utiles pour interroger les tables systemes (mssql)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 31 380 fois - Téléchargée 27 fois

Contenu du snippet

Ce code présente des requetes permettant de lire les tables Syteme SQL SERVEUR.
Pour plus de renseignements sur les colonnes renvoyer (ne pas hésiter à consulter l'aide de MS SQL SERVER)

Source / Exemple :


--Liste des bases de données de SQL SERVER
SELECT * from MASTER.dbo.sysdatabases 

--Liste des tables utilisateur de SQL SERVEUR
SELECT * from dbo.sysobjects
WHERE xtype= 'U'

--Différentes listes possibles (xtype)
--C = Contrainte CHECK
--D = Valeur par défaut ou contrainte DEFAULT
--F = Contrainte FOREIGN KEY
--L = Journal
--FN = Fonction scalaire
--IF = Fonction table en ligne
--P = Procédure stockée
--PK = Contrainte PRIMARY KEY (de type K)
--RF = Procédure stockée de réplication
--S = Table système
--TF = Fonction table
--TR = Déclencheur
--U = Table utilisateur
--UQ = Contrainte UNIQUE (de type K)
--V = Vue
--X = Procédure stockée étendue

--Liste des colonnes d'une table

SELECT * from dbo.syscolumns
--XType est le type de colonne
--extrait de la dbo.table systype

--Liste des tables utilsteaurs avec leurs colonnes et leurs types
SELECT TABLES.name,COLONNES.name, TYPES.name FROM dbo.syscolumns as COLONNES
INNER JOIN dbo.sysobjects as TABLES 
ON TABLES.ID = COLONNES.ID
INNER JOIN dbo.systypes AS TYPES
ON TYPES.xtype = COLONNES.xtype
WHERE TABLES.xtype = 'U'

--Liste des colonnes défaut d'une base de données

SELECT cols.name as colonne_name, c_obj.name as default_name,t_obj.name as table_name FROM sysobjects t_obj, sysobjects c_obj, syscolumns cols
WHERE cols.id = t_obj.id AND c_obj.id = cols.cdefault AND c_obj.xtype = 'D'

A voir également

Ajouter un commentaire Commentaires
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Hello,

voici ma version de cette requête, que j'utilise depuis un moment dans una abstraction db :

SELECT syscolumns.name as colname, systypes.name,
syscolumns.length, syscolumns.isnullable, syscolumns.xprec, syscolumns.collation,
syscolumns.iscomputed, syscolumns.colorder, syscolumns.autoval
FROM dbo.systypes systypes
INNER JOIN dbo.syscolumns syscolumns ON syscolumns.xusertype = systypes.xusertype
WHERE syscolumns.id = OBJECT_ID(N'{__TABLENAME__}')

où {__TABLENAME__} est à remplacer par le nom de la table dont on recherche les infos.
A ajouter pour spécifier une colonne : AND syscolumns.name = '{__COLUMNNAME__}'
même remarque pour {__COLUMNNAME__} que pour {__TABLENAME__}.

Et puisqu'on y est : SELECT TOP 1 IDENTITYCOL FROM '{__TABLENAME__}' pour récupérer la colonne identité d'une table.

A noter que mssql possède un bon paquet de procédures pour avoir tout un tas d'infos, les "sp_*" notamment.
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
28
Je suis d'accord, je ne l'ai pas remarqué.

Si tu replaces xtype par xusertype le résultat est correct.
Il y a que ce type la qui pause probleme, dans les autres cas xtype = xusertype.

Et pour compléter la source

La table système dbo.syscolumns

renvoie aussi les paramétres des procédures stockées et fonctions.

Merci de la remarque.
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
Salut,

Tu as remarquer les doublons pour les colonnes nvarchar/sysname avec ta requête :
SELECT TABLES.name,COLONNES.name, TYPES.name FROM dbo.syscolumns as COLONNES
INNER JOIN dbo.sysobjects as TABLES
ON TABLES.ID = COLONNES.ID
INNER JOIN dbo.systypes AS TYPES
ON TYPES.xtype = COLONNES.xtype
WHERE TABLES.xtype = 'U'

exemple : pour une colonne "Non" en nvarchar ça donne :
Table | Nom | nvarchar
Table | Nom | sysname

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.