Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2011, 08:26   #1
Greek9000
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 151
По умолчанию Как получить размер базы данных

Здравствуйте.

Возникла необходимость узнать размер рабочей базы данных. Но нужен не только он, а ещё некоторые дополнительные параметры (кол-во строк в заданных таблицах и т.п.).
Что бы упростить получение информации, желательно оформить это всё в отдельную хранимую процедуру.

Для получения размера БД думаю использовать sp_spaceused без параметров. Проблема в том, что у меня не получается поместить результат в отдельную таблицу. Во-первых, sp_spaceused возвращает два набора данных, которые имеют разный набор строк, а во-вторых - при выполнении запроса возникает ошибка "Сообщение 213, уровень 16, состояние 7, процедура sp_spaceused, строка 113
Ошибка вставки: имя столбца или число предоставленных значений не соответствует определению таблицы."


Запрос такой:
Код:
declare @TdbSize table(
	name_ nvarchar(128), 
	dbData_ varchar(18), 
	dbSize_ varchar(18), 
	uaSpace_ varchar(18));
insert into @TdbSize(name_, dbData_, dbSize_, uaSpace_)
	exec sp_spaceused;
select * from @TdbSize;
Причём, я пробовал и с dbData_ и без него. Результат отличается только номером строки в сообщении.

Подскажите, пожалуйста, как можно поместить первый набор данных в таблицу, или переменную применительно к ms sql server 2005?

Спасибо.
Greek9000 вне форума Ответить с цитированием
Старый 02.08.2011, 13:49   #2
Greek9000
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 151
По умолчанию

использовать sp_spaceused в чистом виде не получилось, но вот чего я нашёл:
Код:
sp_helptext 'sp_spaceused'
В результате получаем внутренности хранимой процедуры и потрошим их:

Код:
	declare
	   @dbsize bigint 
	  ,@logsize bigint
	  ,@rslt_dbsize varchar(128);

	select 
		@dbsize = sum(convert(bigint,case when status & 64 = 0 then size else 0 end))  
	  , @logsize = sum(convert(bigint,case when status & 64 <> 0 then size else 0 end))  
	  from dbo.sysfiles  

	 select   
	  @rslt_dbsize = 
		ltrim(str((convert (dec (15,2),@dbsize) + convert (dec (15,2),@logsize))   
			* 8192 / 1048576,15,2) + ' MB');
Вуаля!
Greek9000 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как использовать значения из базы данных? c# Anton007 Общие вопросы C/C++ 1 17.05.2011 00:13
Получить список пользователей базы данных. MySQL vedro-compota SQL, базы данных 3 22.09.2010 13:23
Как получить размер строки типа LPCWSTR? Gtx541 Общие вопросы C/C++ 1 30.05.2010 14:18
как посчитать объем базы данных? panuta БД в Delphi 1 25.05.2010 13:45
Как проверить наличие базы данных на сервере Oooleg Microsoft Office Excel 1 25.02.2010 18:11