QUELQUES REQUETES UTILES POUR INTERROGER LES TABLES SYSTEMES (MSSQL)

Signaler
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/31587-quelques-requetes-utiles-pour-interroger-les-tables-systemes-mssql

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
86
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