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

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

原文:

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

这个是因为这些表的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]
 
posted on
2018-08-03 09:03 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/lonelyxmas/p/9411484.html

你可能感兴趣的文章
Android Study 玩转百度ocr身份证识别不是梦~
查看>>
C# 调用WebApi
查看>>
巧用SQL Server Profiler
查看>>
JSP九大内置对象的作用和用法总结?
查看>>
shh
查看>>
loadrunner 的几个常用函数(一)
查看>>
折半查找,binarySearch
查看>>
fatal error C1083: Cannot open include file: '头文件名': No such file or directory解决方案
查看>>
NOIP引水入城(dfs)
查看>>
[ZJOI2016]大森林(LCT)
查看>>
图片优化
查看>>
xshell 5 书写汉字乱码
查看>>
mac下nginx的安装
查看>>
Notepad++集成VC2010环境
查看>>
Eclipse安装Freemarker插件
查看>>
centos7命令3
查看>>
substr函数 strstr函数
查看>>
HTTP 常用 Header
查看>>
笔记:深入解析MapReduce架构设计与实现原理 第5章 Job提交与初始化
查看>>
去除HTML5 number右边的箭头
查看>>