esto podría darle un comienzo:
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
EDITAR:TABLAS TEMPORALES:
las tablas temporales son ligeramente diferentes, por ejemplo, esto funciona en sql 2008 para una tabla temporal llamada #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
NOTAS:esto da una lista separada por comas, pero NO intentó eliminar esa última coma, solo da una lista, que probablemente querrá poner en una cadena y manipular, etc. y luego usarla como un sql dinámico o algo así. Aún así, debería darle un comienzo sobre lo que desea hacer.
NOTA para otros, sql 2000 no mostraría las longitudes correctamente, por ejemplo, en un varchar (45), solo enumeraría la parte varchar y no intenté volver a trabajar eso para esta pregunta.