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

Откуда: München
Сообщений: 542
Добрый день.

Досталась по наследству база, в которой все таблицы названы буквацифрами, типа "А153". Таблиц более тысячи. Мне надо добыть из базы информацию. Все что известно, так это что нужные таблицы содержат более миллиона строк.

Как из всей кучи таблиц выбрать нужные?

До этого работала с Ораклом. Может есть что-то вроде execute immediate?
Cделать надо срочно и разово. Поэтому желательно не посылать в документацию, я уже и так в ней...
8 июл 13, 13:28    [14535559]     Ответить | Цитировать Сообщить модератору
 Re: Как найти все таблицы, колличество строк в которых больше заданного?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
select object_schema_name(p.object_id) as [schema], object_name(p.object_id) as [object], sum(p.rows) as [count]
from sys.partitions p
where p.index_id in (0, 1)
group by p.object_id
having sum(p.rows) > 1000000
8 июл 13, 13:32    [14535585]     Ответить | Цитировать Сообщить модератору
 Re: Как найти все таблицы, колличество строк в которых больше заданного?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Для Вашей задачи вполне подойдет:

SELECT
  OBJECT_NAME(P.object_id) AS ObjectName,
  SUM(rows) AS RowsCount
FROM
  sys.partitions p
WHERE
  p.index_id IN (0, 1)
GROUP BY
  OBJECT_NAME(P.object_id)
HAVING 
  SUM(rows) > 1000000
ORDER BY
  2 DESC
8 июл 13, 13:34    [14535604]     Ответить | Цитировать Сообщить модератору
 Re: Как найти все таблицы, колличество строк в которых больше заданного?  [new]
Гость333
Member

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

Ай-яй, как можно складывать счётчики строк для таблиц с одинаковыми именами, но из разных схем?
8 июл 13, 13:36    [14535622]     Ответить | Цитировать Сообщить модератору
 Re: Как найти все таблицы, колличество строк в которых больше заданного?  [new]
l_kator
Member

Откуда: München
Сообщений: 542
Спасибо огромное!!!
Спасли мне день работы!!!
8 июл 13, 13:36    [14535628]     Ответить | Цитировать Сообщить модератору
 Re: Как найти все таблицы, колличество строк в которых больше заданного?  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
l_kator
Добрый день.

Досталась по наследству база, в которой все таблицы названы буквацифрами, типа "А153". Таблиц более тысячи. Мне надо добыть из базы информацию. Все что известно, так это что нужные таблицы содержат более миллиона строк.

Как из всей кучи таблиц выбрать нужные?

До этого работала с Ораклом. Может есть что-то вроде execute immediate?
Cделать надо срочно и разово. Поэтому желательно не посылать в документацию, я уже и так в ней...


[SQL]
SELECT p.[object_id], SUM(p.[rows])
FROM sys.partitions p
WHERE p.index_id IN (0, 1)
GDOUP BY p.object_id
[/SQL]
8 июл 13, 13:36    [14535629]     Ответить | Цитировать Сообщить модератору
 Re: Как найти все таблицы, колличество строк в которых больше заданного?  [new]
l_kator
Member

Откуда: München
Сообщений: 542
Сергей Викт. ,

а можно в этот запрос как-то вьюшки еще добавить?
5 сен 13, 15:26    [14800402]     Ответить | Цитировать Сообщить модератору
 Re: Как найти все таблицы, колличество строк в которых больше заданного?  [new]
Glory
Member

Откуда:
Сообщений: 104751
l_kator
а можно в этот запрос как-то вьюшки еще добавить?

Если представление индексировано, то оно уже там есть
5 сен 13, 15:29    [14800424]     Ответить | Цитировать Сообщить модератору
 Re: Как найти все таблицы, колличество строк в которых больше заданного?  [new]
l_kator
Member

Откуда: München
Сообщений: 542
Значит, представления в моей базе - не индиксированные :(
5 сен 13, 15:59    [14800582]     Ответить | Цитировать Сообщить модератору
 Re: Как найти все таблицы, колличество строк в которых больше заданного?  [new]
Glory
Member

Откуда:
Сообщений: 104751
l_kator
Значит, представления в моей базе - не индиксированные :(

Неиндексированное представление - это просто текст запроса, сохраненный на сервере
5 сен 13, 16:05    [14800629]     Ответить | Цитировать Сообщить модератору
 Re: Как найти все таблицы, колличество строк в которых больше заданного?  [new]
l_kator
Member

Откуда: München
Сообщений: 542
да я это понимаю, но у меня какие-то жутко урезанные права, я не могу посмотреть СКЛ, который лежит в основе вьюшек. Вообще дефинишен объектов не могу смотреть. Вот только стоки считать...
5 сен 13, 16:08    [14800660]     Ответить | Цитировать Сообщить модератору
 Re: Как найти все таблицы, колличество строк в которых больше заданного?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
l_kator
а можно в этот запрос как-то вьюшки еще добавить?

В этот — никак.
declare @view_name nvarchar(517), @count bigint, @sql nvarchar(4000);

declare cur cursor local fast_forward for
   select quotename(object_schema_name(v.object_id)) + N'.' + quotename(v.name)
   from sys.views v
   order by 1;

open cur;

fetch next from cur into @view_name;

while @@fetch_status = 0
begin
   set @sql = 'select @count = count_big(*) from ' + @view_name + N' with(nolock)';
   
   exec sp_executesql @sql, N'@count bigint output', @count output;
   
   if @count > 1000000
      print @view_name + N' has ' + cast(@count as nvarchar(30)) + N' row(s)';

   fetch next from cur into @view_name;
end;

close cur;

deallocate cur;

Предупреждение: работать может очень долго. Зависит от того, какие у вас там вьюшки.
5 сен 13, 16:08    [14800665]     Ответить | Цитировать Сообщить модератору
 Re: Как найти все таблицы, колличество строк в которых больше заданного?  [new]
чч
Guest
l_kator,

а так не пробовали?
create table dbo.v(n nvarchar(300), qty int)

declare @s table(n nvarchar(3000))
declare	@q nvarchar(3000)


insert @s
select 'insert into dbo.v(n, qty) select ' + ''''+v.name+'''' + ', count(*) from ' + s.name + '.' + v.name + ' with (nolock)' from sys.views v
join sys.schemas s on v.schema_id = s.schema_id


while exists(select 1 from @s)
begin
	select top 1 @q = n from @s
	exec sp_executesql @q

	delete @s
	where n = @q
end

select * from dbo.v
order by qty


drop table dbo.v
5 сен 13, 16:14    [14800720]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить