dette kan give dig en start:
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 TABELLER:
temp-tabeller er lidt forskellige, for eksempel virker dette i sql 2008 for en temp-tabel ved navn #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
BEMÆRK:dette giver en kommasepareret liste, men forsøgte IKKE at fjerne det sidste komma, det giver kun en liste, som du sandsynligvis vil sætte på en streng og manipulere, osv. og derefter bruge som en dynamisk sql eller noget. Alligevel bør det give dig en start på, hvad du ønsker at gøre.
BEMÆRK for andre ville sql 2000 ikke vise længderne korrekt, f.eks. på en varchar(45), den ville bare vise varchar-delen, og jeg forsøgte ikke at omarbejde det til dette spørgsmål.