2010-11-23 58 views
1

給一個帶有許多表的數據庫(Sybase),我想寫一個SQL查詢,它將爲每個表計算行數和列數。用於生成數據庫指標的簡單查詢?

不幸的是,我的SQL有點生疏。我可以生成的表名:

select name from sysobjects where type = 'U' 

但如何綁定數據庫恢復到T在:

select count(*) from T 

我是無法理解。是否有可能做這種事情?

回答

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) 
+0

鑑於SQL Server和Sybase有相似的血統,這應該工作得很好。 – 2010-11-23 02:47:32

+0

這對ASE工作 – AdamH 2010-11-23 09:37:41

2

由於fredt給出了答案,我只是提供一些額外的信息。

內置過程sp_spaceused「tablename」將爲您提供選定表的行數,以及它使用多少存儲空間的詳細信息。在沒有參數的情況下使用,它爲整個當前數據庫提供存儲使用。

您可以查看各種系統存儲過程中的SQL,查看他們從哪裏獲取信息。 sp_spaceused和sp_help在這方面對你都很有用。他們住在sybsystemprocs數據庫中。只要小心不要修改任何這些程序。

存儲過程的各種版本稱爲sp_rowcount,在因特網上浮動,提供你所要求的內容(rowcount),但它們在內部等價於fredt中的select語句。我使用的一個提供索引計數和表鎖定方案。我不記得我的地址在哪裏,所以不要僅僅分發它,以防止我擾亂了某人的版權。