给一个包含许多表的数据库(Sybase),我想编写一个SQL查询,为每个表计算行数和列数。
不幸的是,我的SQL有点生疏。我可以生成表名:
select name from sysobjects where type = 'U'
但如何绑定返回到T的数据库:
select count(*) from T
超出我的范围。甚至可以做这种事情吗?
答案 0 :(得分:3)
我不使用Sybase,但在线文档表明行数在systabstats
,且列在syscolumns
。
SELECT sysobjects.name,
(SELECT COUNT(*) FROM syscolumns WHERE syscolumns.id = sysobjects.id) AS cols,
systabstats.rowcnt
FROM sysobjects
JOIN systabstats
ON (sysobjects.id = systabstats.id AND sysobjects.type = 'U' AND systabstats.indid = 0)
答案 1 :(得分:2)
正如弗雷特给出了答案,我只是提供一些额外的信息。
内置过程sp_spaceused“tablename”将为您提供所选表的行数,以及它使用的存储空间的详细信息。在没有参数的情况下使用它可以为当前数据库提供整体存储使用。
您可以查看各种系统存储过程中的SQL,以了解它们从何处获取信息。 sp_spaceused和sp_help在这方面对你都有用。他们住在sybsystemprocs数据库中。请注意不要修改任何这些程序。
在互联网上有一个名为sp_rowcount的存储过程的各种版本,它们提供了你所要求的东西(无论如何都是rowcount),但在内部它们等同于来自fredt的select语句。我使用的那个提供索引计数和表锁定方案。我不记得我到底在哪里,所以不要只是分发它以防万一我的版权被打扰。