2010-01-25 36 views

Trả lời

15

Có bạn đi ... sử dụng một bảng có nguồn gốc.

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 
1

từ khtan @SQL Server Forums, điều này được sử dụng để thả tất cả các bảng trống, có thể bạn có thể thích ứng với nó để ra một số?

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 

Tôi không có SQLServer ở đây nhưng tôi có thể sử dụng nó nếu bạn muốn.

+0

@Rubens Farias, tôi không hiểu, '- exec (@sql)' đã được nhận xét? –

+0

ops, xấu của tôi, xin lỗi =) –

4

tôi sử dụng như sau:

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

Tôi thực sự thích cách tiếp cận này bởi vì bạn chỉ đếm các bảng và hàng. Nếu bạn cần kích thước bảng hoặc khung nhìn, procs, vv thì sys.objects sẽ giúp. – Rob

Các vấn đề liên quan