如何用 SQL 语句获取某个 ACCESS 表占用的磁盘空间大小?
作者:cg1 摘自:access911.net 编辑:cg1 更新日期:2006-2-24 浏览人次:
47
专题地址:
http://access911.net/?kbid;72FAB11E1BDCEEF3
简述:
如何用 SQL 语句获取某个 ACCESS 表占用的磁盘空间大小?《查询》
阅读前需掌握:
熟练掌握 VBA 编程
难度等级:
200
问题:
如何得到一个access表占用磁盘空间的大小呢?
这个表可能包括ole字段??如何做呢?
能否把所有的字段都先len再sum然后得到大小呢?
在 SQL SERVER 2000 中可以用 sp_spaceused 编程获得
exec sp_MSForEachTable
@precommand=N'
create table ##(
id int identity,
表名 sysname,
字段数 int,
记录数 int,
保留空间 Nvarchar(10),
使用空间 varchar(10),
索引使用空间 varchar(10),
未用空间 varchar(10))',
@command1=N'insert ##(表名,记录数,保留空间,使用空间,索引使用空间,未用空间) exec sp_spaceused ''?''
update ## set 字段数=(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 ,不存在此功能。其实在 SQL Server 中你反编译 sp_spaceused 这个系统存储过程可以看到它都是通过查询系统表,比如:sysfiles,sysindexes,spt_values 来判断其占用空间大小的。而 Access 中系统表并不存储这些信息。
在 ACCESS 永远只计算 MDB 的大小,不计算表的大小。但是你可以通过判断每个表的字段类型以及记录数估算出大小,或者干脆将单个表导出到一个新的 MDB 来估算大小。
如果你只是为了得到 OLE 大小,可以用
select sum(lenB(b)) as 总OLE大小 from table_name
关于直接通过 LEN 和 SUM 来获取数据大小是一个思路,但是不能直接完成,因为 LEN 可能对 TEXT 和 OLE对象 字段有效,但是对数字等字段无效,你必须另外编程通过判断数字字段的字段类型来判断其数据占用的空间。而且是估算 ACCESS 中数据的大小,而不是占用磁盘空间的大小。即使你估算了所有的表的数据量大小,加总后还是不等于 MDB 的实际占用磁盘空间大小,因为还有系统表、临时表、表的自定义属性会占用额外的空间,而且有了自定义属性后占用的空间是不确定的。当然,如果你要彻底判断所有这些情况不是不可以,只是非常麻烦而已,要编写很多程序,并且用到 JET SQL / ADO / DAO / ADOX 才能判断。
access911.net 原创文章,作者本人对文章保留一切权利。
如需转载必须征得作者同意并注明本站链接
适用环境:
Access 2000
Access XP
Access 2003
关键字:
磁盘空间,占用 >>>