首页 > 数据库技术 > 详细

计算数据库中各个表的数据量和每行记录所占用空间

时间:2016-01-06 15:39:28      阅读:284      评论:0      收藏:0      [点我收藏+]
-- =============================================
-- Author:      <奔跑的金鱼>
-- Blog:        <http://www.cnblogs.com/OliverQin/>
-- Create date: <2015/01/05>
-- Description: <>
-- =============================================
select * from #tablespaceinfo
--------------------------------创建临时表
CREATE TABLE #tablespaceinfo
    (
      nameinfo     VARCHAR(500) ,    
      rowsinfo     BIGINT ,         
      reserved     VARCHAR(20) ,    
      datainfo     VARCHAR(20) ,
      index_size   VARCHAR(20) ,
      unused       VARCHAR(20)
    )  
-------------------------------声明变量
DECLARE @tablename VARCHAR(255);  

--------------------------------使用游标存储从数据库中获取的实体表名
DECLARE Info_cursor CURSOR
FOR
    SELECT  [ + [name] + ]
    FROM    sys.tables
    WHERE   type = U;  
 
OPEN Info_cursor  
FETCH NEXT FROM Info_cursor INTO @tablename  
 
WHILE @@FETCH_STATUS = 0
    BEGIN 
        INSERT  INTO #tablespaceinfo
                EXEC sp_spaceused @tablename  
        FETCH NEXT FROM Info_cursor  
    INTO @tablename  
    END 
 
CLOSE Info_cursor  
DEALLOCATE Info_cursor  
 
--创建临时表
CREATE TABLE [#tmptb]
    (
      TableName VARCHAR(50) ,
      DataInfo BIGINT ,
      RowsInfo BIGINT ,
      Spaceperrow  AS ( CASE RowsInfo
                         WHEN 0 THEN 0
                         ELSE CAST(DataInfo AS decimal(18,2))/CAST(RowsInfo AS decimal(18,2))
                       END ) PERSISTED
    )

--插入数据到临时表
INSERT  INTO [#tmptb]
        ( [TableName] ,
          [DataInfo] ,
          [RowsInfo]
        )
        SELECT  [nameinfo] ,
                CAST(REPLACE([datainfo], KB, ‘‘) AS BIGINT) AS datainfo ,
                [rowsinfo]
        FROM    #tablespaceinfo
        ORDER BY CAST(REPLACE(reserved, KB, ‘‘) AS INT) DESC  


--汇总记录
SELECT  [tbspinfo].* ,
        [tmptb].[Spaceperrow] AS 每行记录大概占用空间(KB)
FROM    [#tablespaceinfo] AS tbspinfo ,
        [#tmptb] AS tmptb
WHERE   [tbspinfo].[nameinfo] = [tmptb].[TableName]
ORDER BY CAST(REPLACE([tbspinfo].[reserved], KB, ‘‘) AS INT) DESC  

DROP TABLE [#tablespaceinfo]
DROP TABLE [#tmptb]

 

计算数据库中各个表的数据量和每行记录所占用空间

原文:http://www.cnblogs.com/OliverQin/p/5105432.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!