• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
PowerCoder
博客园    首页    新随笔    联系   管理    订阅  订阅

exec sp_spaceused如何只返回一个结果集(转载)

问:


 

我想把每天数据库的大小自动保存到table中
但是exec sp_spaceused是返回2个表,执行下面的语句出错,如何解决?

drop table db_size
go
create table dbo.db_size (
database_name varchar(200),
database_size varchar(200),
unallocated_space varchar(200)
)
go
insert into db_size exec sp_spaceused

exec sp_spaceused始终返回两个结果集,导致报错:

---------------------------------------------------------
Server: Msg 213, Level 16, State 7, Procedure sp_spaceused, Line 196
Insert Error: Column name or number of supplied values does not match table definition.

 

 

答:


 

这个东西你只要查看一下sp_spaceused中是如何写的,把它摘下来就行了
sp_helptext 'sp_spaceused'可以看sp_spaceused的内容

 

可以得知sp_spaceused中,最核心的一段代码如下:

declare @pages int  
declare @dbname sysname  
declare @dbsize dec(15,0)  
declare @logsize dec(15)  
declare @bytesperpage dec(15,0)  
declare @pagesperMB  dec(15,0)  

 select @dbsize = sum(convert(dec(15),size))  
  from dbo.sysfiles  
  where (status & 64 = 0)  
  
 select @logsize = sum(convert(dec(15),size))  
  from dbo.sysfiles  
  where (status & 64 <> 0)  
  
 select @bytesperpage = low  
  from master.dbo.spt_values  
  where number = 1  
   and type = 'E'  
 select @pagesperMB = 1048576 / @bytesperpage  
  
 select  database_name = db_name(),  
  database_size =  
   ltrim(str((@dbsize + @logsize) / @pagesperMB,15,2) + ' MB'),  
  'unallocated space' =  
   ltrim(str((@dbsize -  
    (select sum(convert(dec(15),reserved))  
     from sysindexes  
      where indid in (0, 1, 255)  
    )) / @pagesperMB,15,2)+ ' MB')  

 

所以我们可以用sp_helptext这个系统存储过程,来查看任何存储过程的代码。

 

 

原文链接

 

posted @ 2019-02-19 13:31  PowerCoder  阅读(1269)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3