給一個帶有許多表的數據庫(Sybase),我想寫一個SQL查詢,它將爲每個表計算行數和列數。用於生成數據庫指標的簡單查詢?
不幸的是,我的SQL有點生疏。我可以生成的表名:
select name from sysobjects where type = 'U'
但如何綁定數據庫恢復到T在:
select count(*) from T
我是無法理解。是否有可能做這種事情?
給一個帶有許多表的數據庫(Sybase),我想寫一個SQL查詢,它將爲每個表計算行數和列數。用於生成數據庫指標的簡單查詢?
不幸的是,我的SQL有點生疏。我可以生成的表名:
select name from sysobjects where type = 'U'
但如何綁定數據庫恢復到T在:
select count(*) from T
我是無法理解。是否有可能做這種事情?
我沒有使用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)
由於fredt給出了答案,我只是提供一些額外的信息。
內置過程sp_spaceused「tablename」將爲您提供選定表的行數,以及它使用多少存儲空間的詳細信息。在沒有參數的情況下使用,它爲整個當前數據庫提供存儲使用。
您可以查看各種系統存儲過程中的SQL,查看他們從哪裏獲取信息。 sp_spaceused和sp_help在這方面對你都很有用。他們住在sybsystemprocs數據庫中。只要小心不要修改任何這些程序。
存儲過程的各種版本稱爲sp_rowcount,在因特網上浮動,提供你所要求的內容(rowcount),但它們在內部等價於fredt中的select語句。我使用的一個提供索引計數和表鎖定方案。我不記得我的地址在哪裏,所以不要僅僅分發它,以防止我擾亂了某人的版權。
鑑於SQL Server和Sybase有相似的血統,這應該工作得很好。 – 2010-11-23 02:47:32
這對ASE工作 – AdamH 2010-11-23 09:37:41