В этой стате рассматриваются несколько способов, с помощью которых можно подсчитать количество записей в
таблицах базы данных MS SQL Server
Способ 1: Поскольку приведенный ниже sql-код для подсчета количества записей использует
таблицу sysindexes, его результат зависит от того, была ли обновлена статистика.
T-SQL:
select substring(o.name, 1, 30) Table_Name ,i.rows Number_of_Rows
from sysobjects o
inner join sysindexes i
on (o.id = i.id)
where o.xtype = 'u'
and i.indid < 2
order by o.name
В приведенном примере xtype = 'u' используется для выбора объектов типа "таблица", а
использование indid < 2 гарантирует выборку всех таблиц (как имеющих, так и не имеющих индексы).
Способ 2: Следующий sql-код также может быть использован для определения количества записей
в таблицах базы данных. Для подсчета числа строк этот sql-код использует функцию агрегации.
Обрамление кавычками выбранного названия таблицы необходимо для обработки пробелов в названии
(если такие названия существуют).
T-SQL:
SET NOCOUNT ON
DECLARE tables_cursor CURSOR
FOR
SELECT name FROM sysobjects WHERE type = 'U' order by 1
OPEN tables_cursor
DECLARE @tablename varchar(50)
FETCH NEXT FROM tables_cursor INTO @tablename
WHILE (@@fetch_status <> -1)
BEGIN
select @tablename = quotename(@tablename, '[]')
DECLARE @CMD VARCHAR(100)
PRINT @TABLENAME
SELECT @CMD = ' select count(*) from '+@tablename+' '
EXEC (@CMD)
FETCH NEXT FROM tables_cursor INTO @tablename
END
DEALLOCATE tables_cursor
SET NOCOUNT OFF
Способ 3: Для решения поставленной задачи можно также использовать недокументированную
хранимую процедуру sp_Msforeachtable. Sp_Msforeachtable сканирует все таблицы в определенной
базе данных и выполняет указанную sql-команду (ы) для каждой из таблиц. Для подстановки
имени таблицы используется символ "?".
T-SQL:
sp_msforeachtable @command1= 'print ''?''', @command2 = "select count(*) from ?"
|