博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
查看数据库表的数据量和SIZE大小的脚本修正
阅读量:6422 次
发布时间:2019-06-23

本文共 2366 字,大约阅读时间需要 7 分钟。

在使用桦仔的时,遇到下面一些错误

这个是因为这些表的Schema是Maint,而不是默认的dbo,造成下面这段SQL在执行EXEC sp_spaceused @tablename时出现

Msg 15009, Level 16, State 1, Procedure sp_spaceused, Line 75

The object 'xxxx' does not exist in database 'YourSQLDba' or is invalid for this operation.

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 

修正后的脚本如下所示

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  '[' + s.[name] +']' +'.' + '[' + t.[name] + ']'
    FROM    sys.tables t
    INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
    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://ixrra.baihongyu.com/

你可能感兴趣的文章
Java注册登陆学习笔记
查看>>
python学习笔记(一)之列表
查看>>
解析企业Shell面试题
查看>>
CentOS6.0_X86_64 oracle 11g R2 开机自动启动(linux)
查看>>
Android UI开发第二十四篇——Action Bar
查看>>
细说暴库的原理与方法
查看>>
DOS程序SOL中文输出经验
查看>>
限制容器对CPU的使用 - 每天5分钟玩转 Docker 容器技术(28)
查看>>
Docker在CentOS安装文档
查看>>
微软官方下载windows 7啦
查看>>
Windows Phone 实用开发技巧1-20合集(电子书+源代码)
查看>>
获取MDI窗体中控件坐标的方法/屏幕局部截图原位写入
查看>>
Tomcat配置及其LNMT/LAMT/LNAMT实现方式
查看>>
我谈网络扫描 -- 之二
查看>>
Android第三十七期 - 视觉动画下拉刷新
查看>>
Remository3.52简体中文语言包
查看>>
DSL技术分析
查看>>
2015年最新数据库流行排行榜
查看>>
Sql Server 错误5123/5120 附加数据库错误
查看>>
有趣的JavaScript数组
查看>>