Pour éviter les lignes en double pour certaines colonnes, utilisez user_type_id au lieu de system_type_id.
SELECT
c.name 'Column Name',
t.Name 'Data type',
c.max_length 'Max Length',
c.precision ,
c.scale ,
c.is_nullable,
ISNULL(i.is_primary_key, 0) 'Primary Key'
FROM
sys.columns c
INNER JOIN
sys.types t ON c.user_type_id = t.user_type_id
LEFT OUTER JOIN
sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id
LEFT OUTER JOIN
sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
WHERE
c.object_id = OBJECT_ID('YourTableName')
Remplacez simplement YourTableName avec votre nom de table réel - fonctionne pour SQL Server 2005 et versions ultérieures.
Si vous utilisez des schémas, remplacez YourTableName par YourSchemaName.YourTableName où YourSchemaName est le nom du schéma réel et YourTableName est le nom réel de la table.