您的位置:首页 > 数据库

SQL Server 表、行空间大小统计

2016-05-06 11:24 417 查看
从某位大大那里复制回来的

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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql server