QUELQUES REQUETES UTILES POUR INTERROGER LES TABLES SYSTEMES (MSSQL)
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014
-
28 mai 2005 à 14:36
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDerniè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.
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 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és6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 201137 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és6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 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
22 déc. 2008 à 22:17
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.
28 mai 2005 à 14:56
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.
28 mai 2005 à 14:36
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