sql server2000下怎么用语句取得数据库的可用空间(也就是鼠标右键点数据库,查看数据库属性可以看到可用空间)
系统提供的过程sp_spaceused取得的数据里面的unallocated space是否就是该可用空间?
如果是的话,为什么数据总是不对?
不是的话,那么该如何取得数据库的可用空间呢???
sp_spaceused在2005下取得的unallocated space数值就是数据库的可用空间!
------解决思路----------------------
贴个别人的成果,你看下行不
以下存储过程查询所有数据库的可用空间
/**
author:Joe.TJ
date:20130328
desc:get the free space of database file
**/
create PROC usp_GetFreeSpace
as
set nocount on;
declare csr cursor for select name from sys.databases where database_id>4;
declare @cmd varchar(2000);
declare @db varchar(50);
create table #res([db_name] varchar(50),[file_name] varchar(50),current_size_mb float,free_space_mb float);
open csr
fetch next from csr into @db;
while(@@FETCH_STATUS=0)
begin
set @cmd=
'use '+@db+
' select DB_NAME() as db_name,name as file_name,
size/128.0 as current_size_mb,(size-FILEPROPERTY(name,''SpaceUsed''))/128.0 as free_space_mb
from sys.database_files';
insert into #res
exec(@cmd);
fetch next from csr into @db;
end
close csr;
deallocate csr;
select * from #res;
drop table #res;
set nocount off;
----------------
EXEC usp_GetFreeSpace
------解决思路----------------------
2005是跳跃式版本,很多内部机制都大改了。不一样很正常,2005开始应该用DMO来查
------解决思路----------------------
用2000跑了一下,关系一样成立,误差照样低于 1%。