急,求救,提问关于使用sp_executesql的问题

Liyingyue_FFS 2008-07-16 11:37:30
要写一个存储过程来获得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:liyingyue3@sina.com
...全文
69 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Liyingyue_FFS 2008-07-16
  • 打赏
  • 举报
回复
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* '+ ltrim(@PageSize)+' from '+@dbname+'.dbo.sysfiles where groupid = 0'
print @sqlstr
exec sp_executesql @sqlstr,N' @ldf int output',@ldf output
-狙击手- 2008-07-16
  • 打赏
  • 举报
回复
declare @ldf int 
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
-狙击手- 2008-07-16
  • 打赏
  • 举报
回复
有什么问题吗?
消息里看不到
-狙击手- 2008-07-16
  • 打赏
  • 举报
回复
declare @ldf int
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


wzy_love_sly 2008-07-16
  • 打赏
  • 举报
回复

--如何将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

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧