това може да ви даде начало:
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
РЕДАКТИРАНЕ:ВРЕМЕННИ ТАБЛИЦИ:
временните таблици са малко по-различни, например това работи в sql 2008 за временна таблица с име #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
ЗАБЕЛЕЖКИ:това дава списък, разделен със запетая, но НЕ се опита да премахне тази последна запетая, дава само списък, който вероятно бихте искали да поставите на низ и да манипулирате и т.н., след което да използвате като динамичен sql или нещо подобно. Все пак трябва да ви даде начало на това, което искате да направите.
ЗАБЕЛЕЖКА за другите, sql 2000 няма да покаже правилно дължините, например на varchar(45), той просто ще посочи частта varchar и аз не се опитах да преработя това за този въпрос.