Je voudrais retourner toutes les tables et son compte à côté. Quel est le moyen le plus rapide de s'y prendre?
Je sais que dans Oracle, vous pouvez faire quelque chose comme ci-dessous, mais vous n'êtes pas sûr de 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;
Voici le sql Sybase qui fait le dessus:
select ob.name,st.rowcnt
from sysobjects ob, systabstats st
where ob.type="U"
and st.id=ob.id
order by ob.name
Cela dépend de quel produit Sybase vous voulez dire. Dans SQL Anywhere (9 et 11), votre solution ne fonctionne pas, mais cela fonctionne:
select table_name, count
from systable
where primary_root<>0 and creator=1
order by 1
Si l'utilisateur actuel est le créateur:
SELECT table_name, count
FROM sys.systable
WHERE creator = user_id()
REMARQUE: je teste ceci dans Sybase ASA 9.
Comme il peut y avoir plusieurs entrées dans la table systabstats
, la requête doit être:
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
utiliser la requête ci-dessous
select name,row_count(db_id(),id) as "Rows"
from sysobjects where type='U' order by 2 desc
sélectionnez ob.name, st.rowcnt à partir de sysobjects ob, systabstats st où b.type = 'U' et st.id = ob.id et indid = 0 ordonné par ob.name
Cela fonctionne pour moi avec "SQL Central" avec SQL Anywhere 17:
SELECT table_name, st.count
FROM systable st
WHERE table_type = 'BASE'