要写一个存储过程来获得SQLSERVER服务器上面所有的数据库的已分配空间大小和已使用的空间大小。--获得数据库页文件大小
DECLARE @PageSize float
SELECT @PageSize=v.low/1024.0 FROM master..spt_values v WHERE v.number=1 AND v.type='E'create table #tmplogspc (DatabaseName sysname, LogSize float, SpaceUsedPerc float, Status bit)
insert #tmplogspc EXEC ('dbcc sqlperf(logspace)')
--select * from #tmplogspc--每个库的已分配空间由mdf和ldf两部分组成,相应的已使用空间就是ldfuse+mdfuse
create table #tmpdbspc (DBname sysname, ldfuse float,ldf float,mdfuse float,mdf float,Status bit)
insert #tmpdbspc select DatabaseName,Logsize*SpaceUsedPerc*10.24,0,0,0,0 from #tmplogspc
--上面的insert已经得到了所有数据库的ldfuse,然后希望在下面得到所有数据库的ldf和mdf
--通过select size from 数据库名.dbo.sysfiles where groupid=0 可以得到每个数据库的idf
--groupid=1的时候可以得到mdf,所以希望在下面用一个循环把每条记录的mdf和ldf更新,更新后的Status改成1
while (exists (select 1 from #tmpdbspc where Status =0))
begin
declare @dbname sysname
declare @sqlstr nvarchar(1000)
declare @ldf float,@mdf float
select top 1 @dbname = DBname from #tmpdbspc where Status =0
set @sqlstr='select @ldf=size*@PageSize into from '+@dbname+'.dbo.sysfiles where groupid = 0'
--print @sqlstr
--这个语句在外面执行得到了正确的结果,但是在下面使用sp_executesql执行的时候提示@ldf和@PageSize没有定义
--目前在这里卡住了,怎么解决啊
exec sp_executesql @sqlstr
--print @ldf
--后面就是用同样的方法得到@mdf,然后update到#tmpdbspc里面了
end
select *from #tmpdbspc
drop table #tmplogspc
drop table #tmpdbspc
请各位大侠帮帮忙看看,我昨天注册的,全部就这些分了。急啊,今天就要交了。我的MSN:[email protected]
DECLARE @PageSize float
SELECT @PageSize=v.low/1024.0 FROM master..spt_values v WHERE v.number=1 AND v.type='E'create table #tmplogspc (DatabaseName sysname, LogSize float, SpaceUsedPerc float, Status bit)
insert #tmplogspc EXEC ('dbcc sqlperf(logspace)')
--select * from #tmplogspc--每个库的已分配空间由mdf和ldf两部分组成,相应的已使用空间就是ldfuse+mdfuse
create table #tmpdbspc (DBname sysname, ldfuse float,ldf float,mdfuse float,mdf float,Status bit)
insert #tmpdbspc select DatabaseName,Logsize*SpaceUsedPerc*10.24,0,0,0,0 from #tmplogspc
--上面的insert已经得到了所有数据库的ldfuse,然后希望在下面得到所有数据库的ldf和mdf
--通过select size from 数据库名.dbo.sysfiles where groupid=0 可以得到每个数据库的idf
--groupid=1的时候可以得到mdf,所以希望在下面用一个循环把每条记录的mdf和ldf更新,更新后的Status改成1
while (exists (select 1 from #tmpdbspc where Status =0))
begin
declare @dbname sysname
declare @sqlstr nvarchar(1000)
declare @ldf float,@mdf float
select top 1 @dbname = DBname from #tmpdbspc where Status =0
set @sqlstr='select @ldf=size*@PageSize into from '+@dbname+'.dbo.sysfiles where groupid = 0'
--print @sqlstr
--这个语句在外面执行得到了正确的结果,但是在下面使用sp_executesql执行的时候提示@ldf和@PageSize没有定义
--目前在这里卡住了,怎么解决啊
exec sp_executesql @sqlstr
--print @ldf
--后面就是用同样的方法得到@mdf,然后update到#tmpdbspc里面了
end
select *from #tmpdbspc
drop table #tmplogspc
drop table #tmpdbspc
请各位大侠帮帮忙看看,我昨天注册的,全部就这些分了。急啊,今天就要交了。我的MSN:[email protected]
--如何将exec执行结果放入变量中? declare @num int, @sql nvarchar(4000)
set @sql= 'select @a=count(*) from tableName '
exec sp_executesql @sql,N '@a int output ',@num output
select @num
set @sqlstr='select @ldf=size*@PageSize into from '+@dbname+'.dbo.sysfiles where groupid = 0'
--print @sqlstr
--这个语句在外面执行得到了正确的结果,但是在下面使用sp_executesql执行的时候提示@ldf和@PageSize没有定义
--目前在这里卡住了,怎么解决啊
exec sp_executesql @sqlstr,N' @ldf int output',@ldf output
set @sqlstr='select @ldf=size* '+ ltrim(@PageSize)+' from '+@dbname+'.dbo.sysfiles where groupid = 0'
--print @sqlstr exec sp_executesql @sqlstr,N' @ldf int output',@ldf output
declare @sqlstr nvarchar(1000)
declare @ldf float,@mdf float
select top 1 @dbname = DBname from #tmpdbspc where Status =0
set @sqlstr='select @ldf=size* '+ ltrim(@PageSize)+' from '+@dbname+'.dbo.sysfiles where groupid = 0'
print @sqlstr
exec sp_executesql @sqlstr,N' @ldf int output',@ldf output