Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 определить размеры таблиц в БД  [new]
pako
Member

Откуда: Вятские Поляны - Москва
Сообщений: 94
Сегодня нужно было определить размеры таблиц в БД.
Написал следующую prg
Может кому пригодится

Use <name BD>


DECLARE @sysFL varchar(100)

drop table #temp

CREATE TABLE [#temp] (
[Name] [nvarchar](100) ,
[Rows] [char] (11) ,
[Reserved] [varchar] (18) ,
[Data] [varchar] (18) ,
[index_size] [varchar] (18) ,
[Unused] [varchar] (18)
) ON [PRIMARY]

DECLARE cursorsys CURSOR FOR
select sysobjects.name
from sysobjects
where sysobjects.xtype='U'

OPEN cursorsys
FETCH NEXT FROM cursorsys into @sysFL
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT into [#temp] EXECute sp_SpaceUsed @sysFL

FETCH NEXT FROM cursorsys into @sysFL

END
CLOSE cursorsys
DEALLOCATE cursorsys

select * from #temp order by convert(int,left(Data,LEN(Data)-3)) desc

select 'ALL DATABASE', sum(convert(int,left(Reserved,LEN(Reserved)-3))) AS 'Reserved',
sum(convert(int,left(Data,LEN(Data)-3))) AS 'Data',
sum(convert(int,left(index_size,LEN(index_size)-3))) AS 'index_size',
sum(convert(int,left(Unused,LEN(Unused)-3))) AS 'Unused' from #temp
31 июл 03, 17:33    [284046]     Ответить | Цитировать Сообщить модератору
 Re: определить размеры таблиц в БД  [new]
Crimean
Member

Откуда:
Сообщений: 13148
А не проще ли посмотреть на исходник sp_spaceused и самому поработать с sysindexes , да еще и по reserved , а не по used , что дает более правильную картину с точки зрения использованного места? :)
31 июл 03, 17:49    [284081]     Ответить | Цитировать Сообщить модератору
 Re: определить размеры таблиц в БД  [new]
EvAlex
Member

Откуда: Israel
Сообщений: 995
sp_MSforeachtable nado ispol'zovat'
31 июл 03, 17:55    [284093]     Ответить | Цитировать Сообщить модератору
 Re: определить размеры таблиц в БД  [new]
EvAlex
Member

Откуда: Israel
Сообщений: 995

/*
Version: SQL Server 7.0/2000
Created by: Alexander Chigrik
http://www.MSSQLCity.com/ - all about MS SQL
(SQL Server Articles, FAQ, Scripts, Tips and Test Exams).

This stored procedure can be used to get the size of all users tables
in the particular database with the number of their rows.
You should simply pass the database name, as in the example below
(if the database name was not specified, the current database will be used):

EXEC GetAlltblRowsSize 'pubs'
*/


IF OBJECT_ID('GetAlltblRowsSize') IS NOT NULL DROP PROC GetAlltblRowsSize
GO

CREATE PROCEDURE GetAlltblRowsSize (
@dbname sysname = null
)
AS
DECLARE @execstr nvarchar(255)
SET NOCOUNT ON
IF @dbname IS NULL SELECT @dbname = DB_NAME()
SELECT @execstr = 'EXEC ' + @dbname + '..sp_MSforeachtable @command1="sp_spaceused ''?''"'
EXEC(@execstr)
GO
31 июл 03, 17:57    [284096]     Ответить | Цитировать Сообщить модератору
 Re: определить размеры таблиц в БД  [new]
pako
Member

Откуда: Вятские Поляны - Москва
Сообщений: 94
Я смотрел эту процу.
Но мне надо было быстро и все данные в одну таблицу для анализа.
Тем более что в базе одной кривой фирмы изготовления > 14000 таблиц.
31 июл 03, 17:57    [284097]     Ответить | Цитировать Сообщить модератору
 Re: определить размеры таблиц в БД  [new]
Гнездин Петр
Member

Откуда: Москва
Сообщений: 359
я пользуюсь таким вариантом:
http://www.pwr.ru/items/?id=12
31 июл 03, 20:05    [284266]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: определить размеры таблиц в БД  [new]
krudensoft
Member

Откуда:
Сообщений: 83
pako,

Ваш скрипт не учитывает схемы.
Вот более "продвинутый" вариант
8)


DECLARE @sysFL varchar(100)

drop table #temp

CREATE TABLE [#temp] (
	[Name] [nvarchar](100) ,
	[Rows] [char] (11) ,
	[Reserved] [varchar] (18) ,
	[Data] [varchar] (18) ,
	[index_size] [varchar] (18) ,
	[Unused] [varchar] (18) 
) ON [PRIMARY]

	DECLARE cursorsys CURSOR FOR 
	select Table_Schema + '.' + Table_Name from INFORMATION_SCHEMA.TABLES

	OPEN cursorsys
	FETCH NEXT FROM cursorsys into @sysFL
	WHILE @@FETCH_STATUS = 0
	BEGIN
		INSERT into [#temp] EXEC sp_SpaceUsed @sysFL
		FETCH NEXT FROM cursorsys into @sysFL
	END
	CLOSE cursorsys
	DEALLOCATE cursorsys

select * from #temp order by convert(int,left(Data,LEN(Data)-3)) desc

select 'ALL DATABASE', sum(convert(int,left(Reserved,LEN(Reserved)-3))) AS 'Reserved',
	sum(convert(int,left(Data,LEN(Data)-3))) AS 'Data',
	sum(convert(int,left(index_size,LEN(index_size)-3))) AS 'index_size',
	sum(convert(int,left(Unused,LEN(Unused)-3))) AS 'Unused' from #temp 
30 июн 09, 14:35    [7359263]     Ответить | Цитировать Сообщить модератору
 Re: определить размеры таблиц в БД  [new]
msLex
Member

Откуда:
Сообщений: 7883
krudensoft,
а дату поста посмотреть не пробывали?
30 июн 09, 14:51    [7359359]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить