Voici une requête simple pour obtenir tout cela :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ------------------------------- -- Nicolas SOUQUET - 13/12/2010 ------------------------------- SELECT S.name AS schema_name , T.name AS table_name , C.name AS column_name , C.column_id , TY.name AS data_type_name , CASE WHEN TY.name IN ('nchar', 'nvarchar') THEN C.max_length / 2 ELSE C.max_length END AS max_length FROM sys.schemas AS S INNER JOIN sys.tables AS T ON S.schema_id = T.schema_id INNER JOIN sys.columns AS C ON C.object_id = T.object_id INNER JOIN sys.types AS TY ON TY.system_type_id = C.system_type_id AND TY.system_type_id = TY.user_type_id WHERE 1 = 1 --AND S.name = 'dbo' --AND T.name = 'maTable' --AND C.name = 'maColonne' ORDER BY T.name, C.column_id |
ElSüket
petit tip : dans Management Studio, faîtes Alt+F1 après avoir selectionné le nom de la table.
je me permets de faire la proposition suivante :
SELECT c.TABLE_CATALOG + ‘.’ + c.TABLE_SCHEMA + ‘.’+ c.TABLE_NAME + ‘.’ + c.COLUMN_NAME as [Base.Schema.Table.colonne]
,typ.name as [Type]
,CASE typ.max_length
WHEN -1 THEN 2147483648
ELSE typ.max_length
END [Nombre Max Octets]
FROM INFORMATION_SCHEMA.COLUMNS c INNER JOIN INFORMATION_SCHEMA.TABLES t
ON c.TABLE_NAME = t.TABLE_NAME
AND c.TABLE_CATALOG = t.TABLE_CATALOG
AND c.TABLE_SCHEMA = t.TABLE_SCHEMA
INNER JOIN sys.types typ
ON c.DATA_TYPE = typ.name
–WHERE c.TABLE_NAME = ‘maTable’
ORDER BY [Base.Schema.Table.colonne]
Sous SQL SERVER 2008 R2, on a les types geometry et geography
name system_type_id user_type_id
geometry 240 129
geography 240 130
donc la jointure ci-dessous pose problème :
INNER JOIN sys.types AS TY
ON TY.system_type_id = C.system_type_id
AND TY.system_type_id = TY.user_type_id
et par conséquent les colonnes de types geometry et geography ne sont pas afficher par ton script.
as-tu une solution à ce problème lié aux types geometry et geography ?
A +