zoukankan      html  css  js  c++  java
  • 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' 
     
     
  • 相关阅读:
    Visual Studio日志
    选择jQuery的理由
    第三方开发者可将JIT和编译器引入WinRT吗?
    Visual Studio 2012和.NET 4.5已经就绪!
    500TB——Facebook每天收集的数据量
    Netflix开源他们的另一个架构——Eureka
    PhoneGap 2.0 发布
    快速哈希算法破坏了加密的安全性
    Blend for Visual Studio 2012:为Windows 8应用所用的UX工具
    系统中的故障场景建模
  • 原文地址:https://www.cnblogs.com/qanholas/p/1861774.html
Copyright © 2011-2022 走看看