码迷,mamicode.com
首页 > 数据库 > 详细

使用一个T-SQL语句批量查询数据表占用空间及其行数

时间:2015-03-06 11:15:33      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:

原文: 使用一个T-SQL语句批量查询数据表占用空间及其行数

 

要找到数据库中数据表占用的空间和存在的行数。可以使用sp_spaceused搭配数据表的名称。就可以产生该表耗用的空间和现有行数。

如:

USE ADVENTUREWORKS

GO

EXEC sp_spaceused [Sales.SalesOrderHeader]

GO

 

技术分享

 

但如果数据库中包含数千的数据表,如何能利用一句SQL语句来实现?

 

解决方法:

一、动态SQL:

先用T-SQL动态产生表达式,然后放到一个查询中执行。如:

USE ADVENTUREWORKS

GO

SET NOCOUNT ON

SELECT ‘EXEC SP_SPACEUSED [‘+S.name+‘.‘+T. name +‘];‘

FROM sys.tables T INNER JOIN sys.schemas S

ON T.SCHEMA_ID=S.SCHEMA_ID

WHERE S.NAME=‘HumanResources‘

SET NOCOUNT OFF

结果如下:

技术分享

把结果复制到新的窗口执行即可得到结果。

但这种方法需要人手操作不适合自动化、定时化操作。

二、使用累加字符串的方式动态生成:

因为要自动化,所以会利用数据表的INSERT触发器,执行动态表达式。并且自动将输入的数据表,计算结果:

--建立表,执行insert触发器

USE AdventureWorks

GO

CREATE TABLE myTab

(

    TableName VARCHAR(255)

)

GO

 

 

--建立触发器:

CREATE TRIGGER tr2 ON myTab

AFTER INSERT

AS

    DECLARE @sql VARCHAR(max)

    SET @sql=‘‘

        --使用累加字符串,产生语句

    SELECT @sql=@sql+

                        ‘EXEC sp_spaceused [‘+TableName+‘]; ‘

            FROMinserted

            --利用EXECUTE 执行动态语句

    EXEC (@sql)

 

--新增指定的数据表名称,会自动显示数据表的使用空间:

INSERT myTab

SELECT S.name+‘.‘+T.name

FROM sys.tables T INNER JOIN sys.schemas S

ON T.schema_id=S.schema_id

WHERE S.name=‘HumanResources‘

 

 技术分享

使用一个T-SQL语句批量查询数据表占用空间及其行数

标签:

原文地址:http://www.cnblogs.com/lonelyxmas/p/4317614.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!