Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Процедура подсчета числа записей в таблицах / 7 сообщений из 7, страница 1 из 1
19.03.2002, 10:05
    #32025675
Oleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура подсчета числа записей в таблицах
Прошу подсказать !
Можно ли получить за одно обращение TRANSACT-SQL : список ВСЕХ таблиц базы
с числом записей по каждой таблице ?
Есть ли системная процедура ?
...
Рейтинг: 0 / 0
19.03.2002, 10:25
    #32025679
Sergey Vinogradov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура подсчета числа записей в таблицах
Держи запрос (делал очень давно - еще для 6.5):

Select convert(char(9),user_name(o.uid)) as 'Owner',
convert(char(32),o.name) as 'Name',
i.rows as 'Rows',
convert(char(,o.crdate,4)+' '+convert(char(,o.crdate,14) as 'CreateDate'
from dbo.sysobjects o (nolock)
left join dbo.sysindexes i (nolock) on (i.id=o.id and i.indid in (0,1))
where type='U'
order by Owner, Name
...
Рейтинг: 0 / 0
19.03.2002, 10:35
    #32025681
DAlex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура подсчета числа записей в таблицах
-- Могу подарить свою - но есть и системные, но в основном недокументированные.



CREATE PROCEDURE SP_HelpAllTab
AS set nocount on
-- 0000000000000000000000000000000000000000000000000000000000000000000000000000000
-- ***************** < О Б'Е М Ы Т А Б Л И Ц > ******************************
declare @dat_size decimal(15,2),@ind_size decimal(15,2),@name_O sysname,
@res_size decimal(15,2),@upl_size decimal(15,2),@id int,@r int, @i int,
@page_MB decimal(15,2),@unu_size decimal(15,2)
select @page_MB=1048576/low from master.dbo.spt_values
where number = 1 and type = 'E' -- Размер страницы SQL Server в Мегабайтах
declare @stoTabl table (NAME sysname, ROWS int,USE_SIZE varchar(15),
DAT_SIZE varchar(15),IND_SIZE varchar(15),
AVG_LENGTH varchar(15))
declare cur_SelTabStoDB cursor local for select name,id from sysobjects
where xtype = 'U' and status >= 0 and OBJECTPROPERTY(id,N'IsUserTable') = 1
open cur_SelTabStoDB
fetch next from cur_SelTabStoDB into @name_O,@id
while (@@FETCH_STATUS != -1) begin if (@@FETCH_STATUS != -2) begin
select @r=rows from sysindexes where id = @id and
indid = (select min(indid) from sysindexes where id = @id)
select @dat_size=sum(convert(decimal(15),dpages)) -- Под данные
from sysindexes where indid < 2 and id = @id
select @dat_size=@dat_size+isnull(sum(convert(decimal(15),used)), 0)
from sysindexes where indid = 255 and id = @id
select @ind_size=sum(convert(decimal(15),used))-@dat_size -- Под индексы
from sysindexes where indid in (0, 1, 255) and id = @id
select @unu_size=case when @r = 0 then 0 else (@dat_size*@page_MB)/@r end,
@dat_size=@dat_size/@page_MB,@ind_size=@ind_size/@page_MB,
@res_size=@dat_size+@ind_size -- Всего
insert into @stoTabl values (@name_O,@r,str(@res_size,15,2),
str(@dat_size,15,2),str(@ind_size,15,2),str(@unu_size,15,2)) end
fetch next from cur_SelTabStoDB into @name_O,@id end
close cur_SelTabStoDB deallocate cur_SelTabStoDB
insert into @stoTabl select '@@Total',sum(ROWS),
str(sum(convert(decimal(15,2),USE_SIZE)),15,2),
str(sum(convert(decimal(15,2),DAT_SIZE)),15,2),
str(sum(convert(decimal(15,2),IND_SIZE)),15,2),'' from @stoTabl
select * from @stoTabl order by NAME
if (select count(*) from @stoTabl) = 0 return 3
return 0
...
Рейтинг: 0 / 0
26.03.2002, 10:29
    #32026208
Варяг
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура подсчета числа записей в таблицах
Как сложно ! Только что содрал откуда-то

SELECT
sysobjects.name TableName,
(SELECT rows FROM sysindexes
WHERE id = sysobjects.id
AND indid = 0) Rows
FROM
sysobjects
WHERE
type = 'U'
AND OBJECTPROPERTY(sysobjects.id , 'TableHasIndex' ) = 0
...
Рейтинг: 0 / 0
26.03.2002, 11:19
    #32026214
nic_ii
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура подсчета числа записей в таблицах
2Варяг - а проверял хоть как работает?
...
Рейтинг: 0 / 0
26.03.2002, 13:39
    #32026230
Erika
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура подсчета числа записей в таблицах
Вообще-то работает, если выкинуть последнюю строку
AND OBJECTPROPERTY(sysobjects.id , 'TableHasIndex' ) = 0
т.к. она выкидывает таблицы, в которых есть индексы.
Единственное, чего не поняла - каким образом в список попадает таблица dtproperties - хотя она явно системная, а не user
...
Рейтинг: 0 / 0
27.03.2002, 10:49
    #32026299
Варяг
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура подсчета числа записей в таблицах
Данный вызов работает ДЛЯ ВСЕХ таблиц - с индексами и без! Проверял на своих тестовых базах, потому и дал его вам.
У меня Sql2000. Сам не пойму, причем здесь Rows из sysindex для неиндексированных таблиц !
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Процедура подсчета числа записей в таблицах / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]