sql server - डेटाबेस में प्रत्येक तालिका में रिकॉर्ड्स की सूची सूचीबद्ध करने के लिए क्वेरी




sql-server database (10)

SQL प्रबंधन स्टूडियो में उस जानकारी को प्राप्त करने के लिए, डेटाबेस पर राइट क्लिक करें, फिर तालिका द्वारा रिपोर्ट -> मानक रिपोर्ट -> डिस्क उपयोग का चयन करें।

डेटाबेस में प्रत्येक तालिका की पंक्ति गणना कैसे सूचीबद्ध करें। कुछ समकक्ष

select count(*) from table1
select count(*) from table2
...
select count(*) from tableN

मैं एक समाधान पोस्ट करूंगा लेकिन अन्य दृष्टिकोणों का स्वागत है


आप इसे आजमा सकते हैं:

SELECT  OBJECT_SCHEMA_NAME(ps.object_Id) AS [schemaname],
        OBJECT_NAME(ps.object_id) AS [tablename],
        row_count AS [rows]
FROM sys.dm_db_partition_stats ps
WHERE OBJECT_SCHEMA_NAME(ps.object_Id) <> 'sys' AND ps.index_id < 2
ORDER BY 
        OBJECT_SCHEMA_NAME(ps.object_Id),
        OBJECT_NAME(ps.object_id)

एसक्यूएल रिफ्रेंस में सभी तालिकाओं की पंक्ति गणना खोजने का सबसे तेज़ तरीका ( http://www.codeproject.com/Tips/811017/Fastest-way-to-find-row-count-of-all-tables-in-SQL )

SELECT T.name AS [TABLE NAME], I.rows AS [ROWCOUNT] 
    FROM   sys.tables AS T 
       INNER JOIN sys.sysindexes AS I ON T.object_id = I.id 
       AND I.indid < 2 
ORDER  BY I.rows DESC

खैर सौभाग्य से एसक्यूएल सर्वर प्रबंधन स्टूडियो आपको यह कैसे करना है इस पर एक संकेत देता है। यह करो,

  1. एक SQL सर्वर ट्रेस प्रारंभ करें और जो गतिविधि आप कर रहे हैं उसे खोलें (यदि आप अकेले नहीं हैं और माइक्रोसॉफ्ट एसक्यूएल सर्वर प्रबंधन स्टूडियो में एप्लिकेशन नाम सेट करें) तो अपने लॉगिन आईडी द्वारा फ़िल्टर करें, ट्रेस को रोकें और अब तक दर्ज किए गए किसी भी परिणाम को छोड़ दें;
  2. फिर, एक टेबल पर राइट क्लिक करें और पॉप अप मेनू से संपत्ति का चयन करें;
  3. ट्रेस फिर से शुरू करें;
  4. अब SQL सर्वर प्रबंधन स्टूडियो में बाईं ओर संग्रहण संपत्ति आइटम का चयन करें;

ट्रेस को रोकें और देखें कि माइक्रोसॉफ्ट द्वारा टीएसक्यूएल जेनरेट किया गया है।

संभवतः अंतिम क्वेरी में आप exec sp_executesql N'SELECT साथ शुरू होने वाला एक कथन exec sp_executesql N'SELECT

जब आप निष्पादित कोड को विजुअल स्टूडियो में कॉपी करते हैं तो आप देखेंगे कि यह कोड प्रॉपर्टी विंडो को पॉप्युलेट करने के लिए माइक्रोसॉफ्ट पर इंजीनियरों के सभी डेटा जेनरेट करता है।

जब आप उस क्वेरी में मध्यम संशोधन करते हैं तो आपको ऐसा कुछ मिल जाएगा:

SELECT
SCHEMA_NAME(tbl.schema_id)+'.'+tbl.name as [table], --> something I added
p.partition_number AS [PartitionNumber],
prv.value AS [RightBoundaryValue],
 fg.name AS [FileGroupName],
CAST(pf.boundary_value_on_right AS int) AS [RangeType],
CAST(p.rows AS float) AS [RowCount],
p.data_compression AS [DataCompression]
FROM sys.tables AS tbl
INNER JOIN sys.indexes AS idx ON idx.object_id = tbl.object_id and idx.index_id < 2
INNER JOIN sys.partitions AS p ON p.object_id=CAST(tbl.object_id AS int) AND p.index_id=idx.index_id
LEFT OUTER JOIN sys.destination_data_spaces AS dds ON dds.partition_scheme_id = idx.data_space_id and dds.destination_id = p.partition_number
LEFT OUTER JOIN sys.partition_schemes AS ps ON ps.data_space_id = idx.data_space_id
LEFT OUTER JOIN sys.partition_range_values AS prv ON prv.boundary_id = p.partition_number and prv.function_id = ps.function_id
LEFT OUTER JOIN sys.filegroups AS fg ON fg.data_space_id = dds.data_space_id or fg.data_space_id = idx.data_space_id
LEFT OUTER JOIN sys.partition_functions AS pf ON  pf.function_id = prv.function_id

अब क्वेरी सही नहीं है और आप इसे अपने अन्य प्रश्नों को पूरा करने के लिए अपडेट कर सकते हैं, मुद्दा यह है कि आप रुचि रखने वाले डेटा को निष्पादित करके आपके द्वारा प्राप्त किए गए अधिकांश प्रश्नों के लिए माइक्रोसॉफ्ट के ज्ञान का उपयोग कर सकते हैं और ट्रेस प्रोफाइलर का उपयोग कर उत्पन्न TSQL।

मुझे लगता है कि एमएस इंजीनियरों को पता है कि एसक्यूएल सर्वर कैसे काम करता है और, यह टीएसक्यूएल उत्पन्न करेगा जो आपके द्वारा उपयोग किए जा रहे एसएसएमएस पर संस्करण का उपयोग कर काम कर सकने वाले सभी आइटमों पर काम करता है, इसलिए यह एक बड़ी विविध रिलीज प्रीरवीउस, वर्तमान और भविष्य।

और याद रखें, कॉपी न करें, इसे समझने की कोशिश करें और साथ ही आप गलत समाधान के साथ समाप्त हो सकते हैं।

वाल्टर


मुझे लगता है कि सबसे छोटा, सबसे तेज़ और सरल तरीका होगा:

SELECT
    object_name(object_id) AS [Table],
    SUM(row_count) AS [Count]
FROM
    sys.dm_db_partition_stats
WHERE
    --object_schema_name(object_id) = 'dbo' AND 
    index_id < 2
GROUP BY
    object_id

यदि आप MySQL> 4.x का उपयोग करते हैं तो आप इसका उपयोग कर सकते हैं:

select TABLE_NAME, TABLE_ROWS from information_schema.TABLES where TABLE_SCHEMA="test";

ध्यान रखें कि कुछ स्टोरेज इंजनों के लिए, TABLE_ROWS एक अनुमान है।


यह दृष्टिकोण मूलभूत प्रश्न में दिए गए उदाहरण (उदाहरणों) की तरह सभी तालिकाओं और उनकी गणनाओं के साथ एक बयान तैयार करने के लिए स्ट्रिंग कॉन्सटेनेशन का उपयोग करता है:

          SELECT COUNT(*) AS Count,'[dbo].[tbl1]' AS TableName FROM [dbo].[tbl1]
UNION ALL SELECT COUNT(*) AS Count,'[dbo].[tbl2]' AS TableName FROM [dbo].[tbl2]
UNION ALL SELECT...

अंत में यह EXEC साथ निष्पादित किया जाता है:

DECLARE @cmd VARCHAR(MAX)=STUFF(
                    (
                        SELECT 'UNION ALL SELECT COUNT(*) AS Count,''' 
                              + QUOTENAME(t.TABLE_SCHEMA) + '.' + QUOTENAME(t.TABLE_NAME) 
                              + ''' AS TableName FROM ' + QUOTENAME(t.TABLE_SCHEMA) + '.' + QUOTENAME(t.TABLE_NAME)
                        FROM INFORMATION_SCHEMA.TABLES AS t
                        WHERE TABLE_TYPE='BASE TABLE'
                        FOR XML PATH('')
                    ),1,10,'');
EXEC(@cmd);

स्वीकार किए गए उत्तर ने Azure SQL पर मेरे लिए काम नहीं किया है, यहां one ऐसा है जिसने किया, यह बहुत तेज़ है और मैंने वही किया जो मैं चाहता था:

select t.name, s.row_count
from sys.tables t
join sys.dm_db_partition_stats s
  ON t.object_id = s.object_id
    and t.type_desc = 'USER_TABLE'
    and t.name not like '%dss%'
    and s.index_id = 1
order by s.row_count desc

sp_MSForEachTable 'DECLARE @t AS VARCHAR(MAX); 
SELECT @t = CAST(COUNT(1) as VARCHAR(MAX)) 
+ CHAR(9) + CHAR(9) + ''?'' FROM ? ; PRINT @t'

आउटपुट:


SELECT 
    T.NAME AS 'TABLE NAME',
    P.[ROWS] AS 'NO OF ROWS'
FROM SYS.TABLES T 
INNER JOIN  SYS.PARTITIONS P ON T.OBJECT_ID=P.OBJECT_ID;






database