設(shè)為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

何用 SQL 語句獲取某個 ACCESS 表占用的磁盤空間大?

2007-8-10 15:06| 發(fā)布者: admin| 查看: 3286| 評論: 0

問題:

  如何得到一個Access表占用磁盤空間的大小呢?這個表可能包括ole字段??如何做呢?能否把所有的字段都先len再sum然后得到大小呢?在 SQL SERVER 2000 中可以用 sp_spaceused 編程獲得

exec sp_MSForEachTable
@precommand=N'
create table ##(
id int identity,
表名 sysname,
字段數(shù) int,
記錄數(shù) int,
保留空間 Nvarchar(10),
使用空間 varchar(10),
索引使用空間 varchar(10),
未用空間 varchar(10))',
@command1=N'insert ##(表名,記錄數(shù),保留空間,使用空間,索引使用空間,未用空間) exec sp_spaceused ''?''
update ## set 字段數(shù)=(select count(*) from syscolumns where id=object_id(''?'')) where id=scope_identity()',
@postcommand=N'select * from ## order by id drop table ##'

  access 如何完成?
 
  回答:

  Access 不像 SQL SERVER ,不存在此功能。其實(shí)在 SQL Server 中你反編譯 sp_spaceused 這個系統(tǒng)存儲過程可以看到它都是通過查詢系統(tǒng)表,比如:sysfiles,sysindexes,spt_values 來判斷其占用空間大小的。而 Access 中系統(tǒng)表并不存儲這些信息。

  在 ACCESS 永遠(yuǎn)只計算 MDB 的大小,不計算表的大小。但是你可以通過判斷每個表的字段類型以及記錄數(shù)估算出大小,或者干脆將單個表導(dǎo)出到一個新的 MDB 來估算大小。如果你只是為了得到 OLE 大小,可以用select sum(lenB(b)) as 總OLE大小 from table_name

  關(guān)于直接通過 LEN 和 SUM 來獲取數(shù)據(jù)大小是一個思路,但是不能直接完成,因?yàn)?LEN 可能對 TEXT 和 OLE對象 字段有效,但是對數(shù)字等字段無效,你必須另外編程通過判斷數(shù)字字段的字段類型來判斷其數(shù)據(jù)占用的空間。而且是估算 ACCESS 中數(shù)據(jù)的大小,而不是占用磁盤空間的大小。即使你估算了所有的表的數(shù)據(jù)量大小,加總后還是不等于 MDB 的實(shí)際占用磁盤空間大小,因?yàn)檫有系統(tǒng)表、臨時表、表的自定義屬性會占用額外的空間,而且有了自定義屬性后占用的空間是不確定的。當(dāng)然,如果你要徹底判斷所有這些情況不是不可以,只是非常麻煩而已,要編寫很多程序,并且用到 JET SQL / ADO / DAO / ADOX 才能判斷。

最新評論

QQ|站長郵箱|小黑屋|手機(jī)版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2025-7-13 08:41 , Processed in 0.071039 second(s), 16 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回頂部