10

我想返回所有表格及其旁边的计数。最快的方法是什么?

我知道在 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;
4

7 回答 7

22

这是执行上述操作的 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
于 2013-08-12T20:00:20.343 回答
11

这取决于您指的是什么 Sybase 产品。在我的 SQL Anywhere(9 和 11)中,您的解决方案不起作用,但这有效:

select table_name, count
from systable
where primary_root<>0 and creator=1
order by 1
于 2013-10-29T14:03:05.673 回答
4

由于表中可以有多个条目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
于 2016-04-29T09:08:05.930 回答
3

如果当前用户是创建者:

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

注意:我在 Sybase ASA 9 中对此进行了测试。

于 2015-06-18T21:50:56.853 回答
0

使用以下查询

select name,row_count(db_id(),id) as "Rows"
from sysobjects where type='U' order by 2 desc
于 2013-10-23T09:55:55.417 回答
0
select ob.name,st.rowcnt from sysobjects ob, systabstats st  where  b.type='U' 
and st.id=ob.id  and indid=0 order by ob.name
于 2015-06-16T10:24:41.670 回答
0

这适用于我在 SQL Anywhere 17 中使用“SQL Central”:

SELECT table_name, st.count
FROM systable st 
WHERE table_type = 'BASE'
于 2017-08-25T22:22:37.003 回答