これはあなたの出発点になるかもしれません:
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 部分をリストするだけで、この質問のためにそれを作り直そうとはしませんでした。