cela pourrait vous donner un début :
DECLARE @viewname VARCHAR(50);
SET @viewname ='tableorviewname';
SELECT c.name + ' '+ t.name +
case t.name
WHEN 'varchar' THEN '('+CAST(c.max_length AS VARCHAR(3) )+'),'
ELSE ','
end
FROM sys.columns c
INNER JOIN sys.types AS t ON c.system_type_id = t.system_type_id
WHERE object_id = (SELECT object_id from sys.objects where name = @viewname)
ORDER BY c.column_id
MODIFIER :TABLES TEMPORAIRES :
les tables temporaires sont légèrement différentes, par exemple cela fonctionne dans sql 2008 pour une table temporaire nommée #tv_source
DECLARE @viewortablename VARCHAR(50);
SET @viewortablename ='tempdb..#tv_source';
SELECT c.name + ' '+ t.name +
case t.name
WHEN 'varchar' THEN '('+CAST(c.max_length AS VARCHAR(3) )+'),'
ELSE ','
end
FROM tempdb.sys.columns c
INNER JOIN sys.types AS t ON c.system_type_id = t.system_type_id
WHERE object_id = object_id(@viewortablename)
ORDER BY c.column_id
REMARQUES:cela donne une liste séparée par des virgules, mais n'a PAS tenté de supprimer cette dernière virgule, cela ne donne qu'une liste, que vous voudriez probablement mettre sur une chaîne et manipuler, etc., puis utiliser comme sql dynamique ou quelque chose. Néanmoins, cela devrait vous donner un début sur ce que vous souhaitez faire.
REMARQUE pour les autres, sql 2000 n'afficherait pas correctement les longueurs par exemple sur un varchar(45), il listerait simplement la partie varchar et je n'ai pas tenté de retravailler cela pour cette question.