2010-01-25 11 views

Respuesta

15

ahí lo tienes ... usando una tabla derivada.

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

de khtan @SQL Server Forums, esto se utiliza para gota todas las mesas vacías, tal vez usted podría adaptarlo a la salida un conteo?

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 

No tengo SQLServer aquí pero podría intentarlo si lo desea.

+0

@Rubens Farias, no entiendo, '- exec (@sql)' ya está comentado? –

+0

ops, my bad, sorry =) –

4

uso el siguiente:

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

Me gusta mucho este enfoque porque solo cuentas las tablas y las filas. Si necesita tamaño de tabla o vistas, procs, etc. entonces sys.objects ayuda. – Rob

Cuestiones relacionadas