2011-03-01 12 views
9

मैं एक क्वेरी बना रहा हूं जो प्रत्येक तालिका में कॉलम की संख्या लौटाता है, लेकिन मैं दृश्यों को बहिष्कृत करना चाहता हूं।एसक्यूएल: दृश्यों को छोड़कर सभी तालिकाओं में कॉलम की संख्या गिनें

निम्नलिखित काम करता है लेकिन रिटर्न परिणाम देखें:

SELECT COUNT(*), table_name 
FROM INFORMATION_SCHEMA.COLUMNS 
Group By table_name 

कोई सुझाव?

नोट: MSSQL 2005+

+1

किस डेटाबेस के लिए? –

+1

डुप्लिकेट http://stackoverflow.com/questions/1033726/getting-number-of-fields-in-a-डेटा-with-an-sql-statement –

उत्तर

11

यह एसक्यूएल 2005 या उच्चतर

SELECT 
    t.name, 
    count(c.name) 
FROM 

    sys.tables t 
    inner join sys.columns c 
    ON t.object_id = c.object_id 


group by t.name 
0

जुड़ें INFORMATION_SCHEMA.TABLES जानने के लिए कि तालिका एक दृश्य है।

SELECT COUNT(col.column_name), tab.table_name 
FROM INFORMATION_SCHEMA.tables tab 
JOIN INFORMATION_SCHEMA.COLUMNS col ON col.table_name = tab.table_name 
WHERE tab.table_type != 'VIEW' 
GROUP BY 2 
ORDER BY 2 
+0

प्रत्येक ग्रुप द्वारा अभिव्यक्ति में कम से कम एक कॉलम होना चाहिए जो कि नहीं है बाहरी संदर्भ। – Colin

4

कुछ मान लिया गया है इस तरह:

SELECT COUNT(col.column_name), col.table_name 
FROM information_schema.columns col 
    JOIN information_schema.tables tbl 
     ON tbl.table_name = col.table_name 
      AND tbl.table_schema = col.table_schema 
      AND tbl.table_catalog = col.table_catalog 
      AND tbl.table_type <> 'VIEW' 
GROUP BY col.table_name 
+0

अमान्य कॉलम नाम 'schema_name'। अमान्य कॉलम नाम 'catalog_name'। – Colin

+0

@ कोलिन: धन्यवाद। –

0
SELECT tab.table_name,COUNT(col.column_name) 
FROM INFORMATION_SCHEMA.tables tab 
JOIN INFORMATION_SCHEMA.COLUMNS col ON col.table_name = tab.table_name 
WHERE tab.table_type != 'VIEW' 
GROUP BY tab.table_name 
ORDER BY tab.table_name 

इस कोड तालिका नाम से पता चलता है और उनके कॉलम उनके सामने गिनती। यदि आप चाहें तो स्कीमा नाम जोड़ सकते हैं।

+0

सही कोड आपके कोड में जोड़ें –

संबंधित मुद्दे