QUELQUES REQUETES UTILES POUR INTERROGER LES TABLES SYSTEMES (MSSQL)

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 28 mai 2005 à 14:36
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 22 déc. 2008 à 22:17
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

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
22 déc. 2008 à 22:17
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.
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
28 mai 2005 à 14:56
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.
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
28 mai 2005 à 14:36
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
Rejoignez-nous