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

本文共 2370 字,大约阅读时间需要 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://xqcyx.baihongyu.com/

你可能感兴趣的文章
CentOS7下安装python-pip
查看>>
gen already exists but is not a source folder. Convert to a source folder or rename it 的解决办法...
查看>>
20个Linux服务器性能调优技巧
查看>>
填坑记:Uncaught RangeError: Maximum call stack size exceeded
查看>>
SpringCloud之消息总线(Spring Cloud Bus)(八)
查看>>
实时编辑
查看>>
KVO原理分析及使用进阶
查看>>
【348天】每日项目总结系列086(2018.01.19)
查看>>
【294天】我爱刷题系列053(2017.11.26)
查看>>
可替换元素和非可替换元素
查看>>
2016/08/25 The Secret Assumption of Agile
查看>>
(Portal 开发读书笔记)Portlet间交互-PortletSession
查看>>
搭建vsftpd服务器,使用匿名账户登入
查看>>
JAVA中循环删除list中元素的方法总结
查看>>
Java虚拟机管理的内存运行时数据区域解释
查看>>
人人都会深度学习之Tensorflow基础快速入门
查看>>
ChPlayer播放器的使用
查看>>
js 经过修改改良的全浏览器支持的软键盘,随机排列
查看>>
Mysql读写分离
查看>>
Oracle 备份与恢复学习笔记(5_1)
查看>>