यह आपको एक शुरुआत दे सकता है:
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
संपादित करें:अस्थायी तालिकाएँ:
अस्थायी तालिकाएँ थोड़ी भिन्न हैं, उदाहरण के लिए यह #tv_source
. नामक एक अस्थायी तालिका के लिए sql 2008 में काम करती है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
टिप्पणियाँ:यह एक अल्पविराम से अलग सूची देता है, लेकिन उस अंतिम अल्पविराम को हटाने का प्रयास नहीं किया, यह केवल एक सूची देता है, जिसे आप संभवतः एक स्ट्रिंग और हेरफेर करना चाहते हैं, आदि। फिर गतिशील एसक्यूएल या कुछ के रूप में उपयोग करें। फिर भी, यह आपको एक शुरुआत देनी चाहिए कि आप क्या करना चाहते हैं।
दूसरों के लिए ध्यान दें, एसक्यूएल 2000 उदाहरण के लिए वर्चर (45) पर लंबाई को ठीक से प्रदर्शित नहीं करेगा, यह केवल वर्चर भाग को सूचीबद्ध करेगा और मैंने इस प्रश्न के लिए इसे फिर से काम करने का प्रयास नहीं किया।