Получение статистической информации о базе данных SQL Server. Общее число таблиц и записей

Для решения некоторых задач администрирования и разработки баз данных SQL Server может потребоваться статистическая информация о них. В частности, количество таблиц и записей в них.

Рассмотрим алгоритм получения общего количества таблиц в базе данных и суммарного количества записей.

Для того чтобы получить количество таблиц достаточно запросит количество строк в системном представлении sys.Tables, которое содержит информацию о таблицах в данной конкретной базе данных.

Однако данное системное представление не отображает количество записей в таблице. Поэтому для того чтобы получить общее количество записей необходимо запросить количество записей в каждой отдельной таблице и суммировать.

Для решения этой задачи воспользуемся курсором. При обходе курсора будем формировать динамический SQL запрос, который получает количество данных в той или иной конкретной таблице, а полученные результаты суммировать.

Вначале объявим вспомогательные переменные:

Далее создадим курсор и присвоим начальные значения переменным @recordsTotalCount, @recordsCount начальные значения и получим из него имя первой таблицы базы данных.

После этого можно выполнить непосредственно сам обход курсора.

Вспомогательная переменная @sql для формирования SQL запроса необходима потому, что системная хранимая процедура sp_executesql, которая собственно и выполняет его, не поддерживает конкатенацию в параметрах.

После завершения обхода курсора закрываем его и освобождаем ресурсы.

Результаты можно вывести с помощью обычного оператора SELECT.

Ниже приведён возможный пример реализации получения общего количества таблиц и записей в них при помощи хранимой процедуры.

Допустим, имеется некоторая база данных состоящая из трёх таблиц.

  • Первая таблица пустая (0 записей);
  • Вторая таблица содержит 11 записей;
  • Третья таблица содержит 4 записи.

Если для этой базы данных выполнить вышеприведённую хранимую процедуру, то будет получен следующий результат.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *