toto by vám mohlo dát začátek:
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
EDIT:TEMP TABULKY:
dočasné tabulky se mírně liší, například to funguje v SQL 2008 pro dočasnou tabulku s názvem #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
POZNÁMKY:toto poskytuje seznam oddělený čárkami, ale NEPOKOUŠIL SE tuto poslední čárku odstranit, poskytuje pouze seznam, který byste pravděpodobně chtěli umístit na řetězec a manipulovat s ním atd. a poté jej použít jako dynamický sql nebo somthing. Přesto by vám to mělo dát začátek toho, co chcete dělat.
POZNÁMKA pro ostatní, sql 2000 by nezobrazovalo správně délky například na varchar(45), pouze by vypsalo varchar část a nepokoušel jsem se to přepracovat pro tuto otázku.