如何列出Sybase中的所有用户表及其行数?

如何列出Sybase中的所有用户表及其行数?,sybase,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;

我想把所有的桌子和它旁边的计数都还给你。最快的方法是什么

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

以下是执行上述操作的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
使用下面的查询

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

这取决于您所指的Sybase产品。在my SQL Anywhere(9和11)中,您的解决方案不起作用,但这是可行的:

select table_name, count
from systable
where primary_root<>0 and creator=1
order by 1
选择表格名称、计数
来自systable
其中,primary_root0和creator=1
按1订购

如果当前用户是创建者:

选择表格名称、计数
从sys.systable
其中creator=user_id()

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

由于在
SYSTABSATS
表中可能有多个条目,因此查询应为:

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
这适用于我使用“SQL Central”和SQL Anywhere 17:

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

通过运行此查询,我获得了许多表的多个条目。我想可能是因为有多个分区。这可能是原因吗?可能。查看sysobjects表以了解更多详细信息。添加了group by子句来处理多个条目:从sysobjects ob中选择ob.name、sum(st.rowcnt)、SYSTABSATS st,其中ob.type=“U”和st.id=ob.id按ob.name按ob.name排序按ob.nameSybase IQ与
表“SYSTABSATS”未找到反应
!?!这给出了一个近似值,而不是一个精确的计数。不幸的是,systable被弃用。我必须使用较旧版本的sybase,这工作得非常好!这只为我显示了以DBA为所有者的表。它也适用于SQLAnywhere 16。我是以非DBA身份登录的,它显示了该用户的所有表格,正如我所希望的。同样,这只为我显示了拥有DBA的表格。这里我还得到了“Table'SYSTABSATS'not found”,你能为答案添加一些上下文,而不是只发布代码答案吗?
SELECT table_name, st.count
FROM systable st 
WHERE table_type = 'BASE'