すべてのテーブルとその横にある数を返したいのですが。それについて行く最も速い方法は何ですか?
オラクルでは、以下のようなことができますが、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
これは、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
sysobjects ob、systabstats stからob.name、st.rowcntを選択します。ここで、b.type = 'U'およびst.id = ob.idおよびindid = 0は、ob.nameの順序です。
これは、SQL Anywhere 17で「SQL Central」を使用する場合に機能します。
SELECT table_name, st.count
FROM systable st
WHERE table_type = 'BASE'