2010-01-25 9 views

उत्तर

15

ये लीजिए ... एक व्युत्पन्न तालिका का उपयोग कर:

1
से

@SQL Server Forums khtan, इस, सभी खाली टेबल ड्रॉप करने के लिए प्रयोग किया जाता है हो सकता है आप एक गणना उत्पादन के लिए अनुकूल हो सकता है?

declare @name varchar(128), @sql nvarchar(2000), @i int 
select @name = '' 
while @name < (select max(name) from sysobjects where xtype = 'U') 
begin 
    select @name = min(name) from sysobjects where xtype = 'U' and name > @name 
    select @sql = 'select @i = count(*) from [' + @name + ']' 
    exec sp_executesql @sql, N'@i int out', @i out 
    if @i = 0 
    begin 
     select @sql = 'drop table [' + @name + ']' 
     print @sql 
      -- unmask next to drop the table 
     -- exec (@sql) 
    end 
end 

मेरे पास SQLServer नहीं है लेकिन यदि आप चाहें तो मैं उस पर एक स्टैब ले सकता हूं।

SELECT t.NAME AS TableName, sum(p.rows) as RowCounts 
    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.name IS NULL AND i.index_id <= 1 
GROUP BY 
    t.NAME, i.object_id, i.index_id, i.name 
HAVING SUM(p.rows) = 0 
+0

@ रूबेन्स फ़ारीस, मुझे समझ में नहीं आता, '- exec (@sql) 'पहले से ही टिप्पणी की गई है? –

+0

ops, my bad, sorry =) –

4

मैं निम्नलिखित का उपयोग करें।

SELECT * FROM 
(
SELECT 
    [TableName] = so.name, 
    [RowCount] = MAX(si.rows) 
FROM 
    sysobjects so, 
    sysindexes si 
WHERE 
    so.xtype = 'U' 
    AND 
    si.id = OBJECT_ID(so.name) 
GROUP BY 
    so.name 
) sub 
WHERE sub.[RowCount] = 0 
+0

मुझे वास्तव में यह दृष्टिकोण पसंद है क्योंकि आप केवल टेबल और पंक्ति गणना करते हैं। यदि आपको टेबल आकार या विचार, procs, आदि की आवश्यकता है तो sys.objects मदद करता है। – Rob

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