Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Процедура подсчета числа записей в таблицах
|
|||
|---|---|---|---|
|
#18+
Прошу подсказать ! Можно ли получить за одно обращение TRANSACT-SQL : список ВСЕХ таблиц базы с числом записей по каждой таблице ? Есть ли системная процедура ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2002, 10:05 |
|
||
|
Процедура подсчета числа записей в таблицах
|
|||
|---|---|---|---|
|
#18+
Держи запрос (делал очень давно - еще для 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2002, 10:25 |
|
||
|
Процедура подсчета числа записей в таблицах
|
|||
|---|---|---|---|
|
#18+
-- Могу подарить свою - но есть и системные, но в основном недокументированные. 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2002, 10:35 |
|
||
|
Процедура подсчета числа записей в таблицах
|
|||
|---|---|---|---|
|
#18+
Как сложно ! Только что содрал откуда-то 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2002, 10:29 |
|
||
|
Процедура подсчета числа записей в таблицах
|
|||
|---|---|---|---|
|
#18+
2Варяг - а проверял хоть как работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2002, 11:19 |
|
||
|
Процедура подсчета числа записей в таблицах
|
|||
|---|---|---|---|
|
#18+
Вообще-то работает, если выкинуть последнюю строку AND OBJECTPROPERTY(sysobjects.id , 'TableHasIndex' ) = 0 т.к. она выкидывает таблицы, в которых есть индексы. Единственное, чего не поняла - каким образом в список попадает таблица dtproperties - хотя она явно системная, а не user ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2002, 13:39 |
|
||
|
Процедура подсчета числа записей в таблицах
|
|||
|---|---|---|---|
|
#18+
Данный вызов работает ДЛЯ ВСЕХ таблиц - с индексами и без! Проверял на своих тестовых базах, потому и дал его вам. У меня Sql2000. Сам не пойму, причем здесь Rows из sysindex для неиндексированных таблиц ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2002, 10:49 |
|
||
|
|

start [/forum/topic.php?fid=46&tid=1823356]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 350ms |

| 0 / 0 |
