Как считать пустые таблицы в базе данных? - PullRequest
12 голосов
/ 25 января 2010

Есть ли способ подсчета таблиц без строк в моей базе данных с помощью оператора T-SQL?

Ответы [ 3 ]

15 голосов
/ 25 января 2010

Итак, вы используете ... производную таблицу.

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
4 голосов
/ 25 января 2010

Я использую следующее:

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
1 голос
/ 25 января 2010

из khtan @ Форумы по SQL Server , это используется для отбрасывания всех пустых таблиц, может быть, вы могли бы адаптировать его для вывода количества?

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, но я могу попробовать его, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...