Sp_spaceused2

IF EXISTS ( SELECT  1 
            FROM   sysobjects 
            WHERE  name = 'sp_spaceused2' 
                   AND  TYPE = 'P') 
   DROP  PROCEDURE sp_spaceused2 
 
GO 
 
CREATE  PROCEDURE Sp_spaceused2 (@ type        VARCHAR( 2) = 'U', -- The objects type we want size on. 
                                @updateusage VARCHAR( 5) = false  -- Param. for specifying that 
-- usage info. should be updated. 

AS 
   CREATE  TABLE #spt_space 
    ( 
       id       INT  NOT  NULL PRIMARY KEY, 
       name     SYSNAME, 
       ROWS     INT  NULL
       reserved DEC( 15NULL
       data     DEC( 15NULL
       indexp   DEC( 15NULL
       unused   DEC( 15NULL 
    ) 
 
   --  Check the object type. 
   IF @ type  NOT  IN ( 'U', 'S' )  -- no physical data storage. 
     BEGIN 
        RAISERROR( 55000
                  - 1
                  - 1
                  @ type
 
         RETURN (  1 ) 
     END 
 
   --  Check to see if user wants usages updated. 
   IF @updateusage  IS  NOT  NULL 
     BEGIN 
         SELECT @updateusage = Lower(@updateusage) 
 
         IF @updateusage  NOT  IN ( 'true', 'false' ) 
           BEGIN 
              RAISERROR( 15143
                        - 1
                        - 1
                        @updateusage) 
 
               RETURN1 ) 
           END 
     END 
 
   IF @updateusage = 'true' 
     BEGIN 
        DBCC updateusage( 0) WITH no_infomsgs 
 
        PRINT ' ' 
     END 
 
   SET nocount  ON 
 
   --id, name, rows 
   INSERT  INTO #spt_space 
              (id, 
               name, 
               ROWS, 
               data) 
   SELECT i.id, 
         o.name, 
         i.ROWS, 
          0 
   FROM   sysindexes i 
         INNER JOIN sysobjects o 
            ON i.id = o.id 
   WHERE  i.indid <  2 
          AND o. TYPE = @ type 
 
   --reserved 
   UPDATE #spt_space 
   SET    reserved = r.reserved 
   FROM   ( SELECT o.id, 
                  SUM(i.reserved)  AS reserved 
           FROM   sysindexes i 
                 INNER JOIN sysobjects o 
                    ON i.id = o.id 
           WHERE  i.indid  IN (  01255 ) 
                  AND o. TYPE = @ type 
           GROUP   BY o.id) r 
   WHERE  #spt_space.id = r.id 
 
   --data 
   UPDATE #spt_space 
   SET    data = data + r.pages 
   FROM   ( SELECT o.id, 
                 Isnull( SUM(i.dpages),  0AS pages 
           FROM   sysindexes i 
                 INNER JOIN sysobjects o 
                    ON i.id = o.id 
           WHERE  i.indid <  2 
                  AND o. TYPE = @ type 
           GROUP   BY o.id) r 
   WHERE  #spt_space.id = r.id 
 
   UPDATE #spt_space 
   SET    data = data + r.used 
   FROM   ( SELECT o.id, 
                 Isnull( SUM(used),  0AS used 
           FROM   sysindexes i 
                 INNER JOIN sysobjects o 
                    ON i.id = o.id 
           WHERE  i.indid =  255 
                  AND o. TYPE = @ type 
           GROUP   BY o.id) r 
   WHERE  #spt_space.id = r.id 
 
   --index page 
   UPDATE #spt_space 
   SET    indexp = r.used - data 
   FROM   ( SELECT o.id, 
                  SUM(CONVERT(DEC( 15), used))  AS used 
           FROM   sysindexes i 
                 INNER JOIN sysobjects o 
                    ON i.id = o.id 
           WHERE  i.indid  IN (  01255 ) 
                  AND o. TYPE = @ type 
           GROUP   BY o.id) r 
   WHERE  #spt_space.id = r.id 
 
   --unused page 
   UPDATE #spt_space 
   SET    unused = reserved - r.used 
   FROM   ( SELECT o.id, 
                  SUM(CONVERT(DEC( 15), used))  AS used 
           FROM   sysindexes i 
                 INNER JOIN sysobjects o 
                    ON i.id = o.id 
           WHERE  i.indid  IN (  01255 ) 
                  AND o. TYPE = @ type 
           GROUP   BY o.id) r 
   WHERE  #spt_space.id = r.id 
 
   --output 
   SELECT #spt_space.name, 
         ROWS = CONVERT( CHAR( 11), ROWS), 
         reserved =  Ltrim(Str(reserved * d.low /  1024.,  150) + ' ' + 'KB'), 
         data =  Ltrim(Str(data * d.low /  1024.,  150) + ' ' + 'KB'), 
         index_size =  Ltrim(Str(indexp * d.low /  1024.,  150) + ' ' + 'KB'), 
         unused =  Ltrim(Str(unused * d.low /  1024.,  150) + ' ' + 'KB') 
   FROM   #spt_space, 
         MASTER.dbo.spt_values d 
   WHERE  d. NUMBER =  1 
          AND d. TYPE = 'E' 
 
   RETURN  0 
 
GO 
 
-- 'sp_spaceused2' 
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值