to może dać ci począ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
EDYCJA:TABELE TEMP:
Tabele tymczasowe są nieco inne, na przykład działa to w sql 2008 dla tabeli tymczasowej o nazwie #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
UWAGI:to daje listę oddzieloną przecinkami, ale NIE próbowało usunąć tego ostatniego przecinka, daje tylko listę, którą prawdopodobnie chciałbyś umieścić w łańcuchu i manipulować itp., a następnie użyć jako dynamicznego sql lub czegoś. Mimo to powinno dać ci początek tego, co chcesz zrobić.
UWAGA dla innych, sql 2000 nie wyświetlałoby prawidłowo długości, na przykład na varchar(45), po prostu wyświetlałby część varchar i nie próbowałem przerabiać tego dla tego pytania.