2010-10-20 5 views
13

क्या एसएमएसएस में यह पता लगाने का कोई तरीका है कि किसी तालिका में कोई रिकॉर्ड है या नहीं? मुझे टेबल की एक सूची प्राप्त करने की आवश्यकता है जिसमें रिकॉर्ड हैं। शायद एक एसक्यूएल कथन है जो चाल करेगा?एसक्यूएल सर्वर 2008: मेरे पास 1000 टेबल हैं, मुझे पता होना चाहिए कि कौन से तालिकाओं में डेटा है

EXEC sp_MSforeachtable @command1="EXEC sp_spaceused '?'" 

इस डेटाबेस में प्रत्येक तालिका के लिए एक resultset वापस आ जाएगी (प्रत्येक नाम दिखा रहा है, और पंक्तियों की संख्या, अन्य जानकारी के अलावा):

उत्तर

7

एक सरल वाक्य रचना करते हैं:

SELECT [Name]  = o.name 
    ,  [RowCount] = SUM(p.row_count) 

FROM SYS.DM_DB_PARTITION_STATS p 

INNER JOIN 
     SYS.TABLES o 
    ON p.[object_ID] = o.[object_id] 

WHERE index_id <= 1 -- Heap or clustered index only 

GROUP BY o.name 

ORDER BY 2 desc 
3

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

DECLARE @TBL TABLE (
    [name] nvarchar(500), 
    [rows] bigint, 
    [reserved] nvarchar(500), 
    [data] nvarchar(500), 
    [index_size] nvarchar(500), 
    [unused] nvarchar(500) 
) 

INSERT INTO @TBL 
EXEC sp_MSforeachtable @command1="EXEC sp_spaceused '?'" 

SELECT * FROM @TBL 
ORDER BY [rows] DESC 
22

इस प्रयास करें::

SELECT 
    t.NAME AS TableName, 
    SUM(p.rows) AS [RowCount] 
FROM 
    sys.tables t 
INNER JOIN  
    sys.indexes i ON t.OBJECT_ID = i.object_id 
INNER JOIN 
    sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id 
WHERE 
    i.index_id <= 1 
GROUP BY 
    t.NAME, i.object_id, i.index_id, i.name 
ORDER BY 
    SUM(p.rows) DESC 

यहाँ कैसे आप उन्हें एक तालिका चर में डाल सकते हैं, और पंक्तियों की संख्या से उन्हें ऑर्डर है

यह सभी तालिकाओं और उनकी पंक्ति को एक आउटपुट में गिना जाता है।

+0

कीवर्ड 'RowCount' के पास गलत वाक्यविन्यास। –

+0

यह कुछ डीबी तक कैसे सीमित हो सकता है? यदि मेरे पास एक ही एसक्यूएल सर्वर पर समान तालिका नामों के साथ अधिक डेटाबेस हैं, तो पंक्ति गणना एक साथ जोड़ दी जाएगी। –

+0

@OndraPeterka: नहीं, यह हमेशा ** एक डेटाबेस ** के संदर्भ में निष्पादित किया जाता है - और केवल उन तालिकाओं को दिखाया जाएगा। यह ** 0 ** किसी सर्वर के सभी डेटाबेस की सभी तालिकाएं नहीं दिखाता है –

13

अपने प्रश्न के रूप में विशेष रूप से उल्लेख है SSMS आप भी सही शॉर्टकट मेनू से वस्तु एक्सप्लोरर में डेटाबेस क्लिक कर सकते हैं और फिर

Reports -> Standard Reports -> Disc Usage By Table 

Screenshot

+0

से डेटा वापस ला रहा है यह सुपर सुपर सहायक –

+0

सर्वोत्तम उत्तर है। धन्यवाद! – DonP

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