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

系统 2182 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

结果如下:

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

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

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

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

因为要自动化,所以会利用数据表的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 + ']; '

            FROM inserted

            -- 利用 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语句批量查询数据表占用空间及其行数

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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论