当前位置: 首页 > news >正文

查看数据库表的数据量和SIZE大小的脚本修正

在使用桦仔的分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)的脚本时,遇到下面一些错误

这个是因为这些表的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]
 

相关文章:

  • commonJS模块化
  • HDU4185 Oil Skimming(匈牙利)
  • yarn 和 bower的使用
  • phpcms 绑定域名
  • Python笔记:除、取整、取余、乘方
  • 父组件向子组件传值
  • 数加分析型数据库:让你的数据探索更灵活、准确、快速响应和高并发
  • 子组件 向 父组件传值
  • Vue ES6 Jade Scss Webpack Gulp
  • 关于mysql一些锁问题的总结
  • 简述生命周期钩子函数之间的区别
  • 利用百度LBS做一个小Demo
  • mongodb的操作
  • SQL SELECT基本语句结构
  • node + mongodb客户端
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • create-react-app项目添加less配置
  • ES6--对象的扩展
  • export和import的用法总结
  • pdf文件如何在线转换为jpg图片
  • SQL 难点解决:记录的引用
  • 包装类对象
  • 初识 webpack
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 马上搞懂 GeoJSON
  • 前端面试之闭包
  • 浅谈web中前端模板引擎的使用
  • 如何合理的规划jvm性能调优
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 通过几道题目学习二叉搜索树
  • 我建了一个叫Hello World的项目
  • 用mpvue开发微信小程序
  • ​业务双活的数据切换思路设计(下)
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #mysql 8.0 踩坑日记
  • (70min)字节暑假实习二面(已挂)
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (四)c52学习之旅-流水LED灯
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)负载均衡,回话保持,cookie
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .aanva
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .form文件_SSM框架文件上传篇
  • .Net 4.0并行库实用性演练
  • .NET Core引入性能分析引导优化
  • .NET Framework 4.6.2改进了WPF和安全性
  • .Net MVC4 上传大文件,并保存表单
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...