Как перечислить все пользовательские таблицы в Sybase вместе с их количеством строк?

Я хотел бы вернуть все таблицы и их количество рядом с ним. как быстрее всего это сделать?

Я знаю в Oracle, вы можете сделать что-то вроде ниже, но не уверены в Sybase:

declare n number;
begin
   for rec in (select object_name from user_objects where object_type='TABLE')
   loop
     execute immediate 'select count(*) from '||rec.object_name into n;
     dbms_output.put_line (rec.object_name||':'||n);
   end loop;
end;

7 ответов


вот Sybase sql, который делает выше:

select ob.name,st.rowcnt 
from sysobjects ob, systabstats st 
where ob.type="U"  
and st.id=ob.id 
order by ob.name

Это зависит от того, какой продукт Sybase вы имеете в виду. В моем SQL Anywhere (9 и 11) ваше решение не работает, но это работает:

select table_name, count
from systable
where primary_root<>0 and creator=1
order by 1

если текущий пользователь является создателем:

SELECT table_name, count
  FROM sys.systable
 WHERE creator = user_id()

примечание: Я тестирую это в Sybase ASA 9.


Как может быть несколько записей в systabstats таблица, запрос должен быть:

select ob.name, sum(st.rowcnt)
from sysobjects ob, systabstats st 
where ob.type="U"  
and st.id=ob.id 
group by ob.name
order by ob.name

используйте следующий запрос

select name,row_count(db_id(),id) as "Rows"
from sysobjects where type='U' order by 2 desc

выберите ob.имя, st.rowcnt из sysobjects ob, systabstats st где b.тип= 'U' и st.id=ob.id и indid=0 порядок по ob.имя


это работает для меня, используя "SQL Central" с SQL Anywhere 17:

SELECT table_name, st.count
FROM systable st 
WHERE table_type = 'BASE'