使用一个TSQL语句批量查询数据表占用空间及其行数 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

   

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

    要找到数据库中数据表占用的空间和存在的行数,

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

。可以使用sp_spaceused搭配数据表的名称。就可以产生该表耗用的空间和现有行数。

    如: www.hanwangtx.com

    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触发器,执行动态表达式,

电脑资料

使用一个TSQL语句批量查询数据表占用空间及其行数》(https://www.unjs.com)。并且自动将输入的数据表,计算结果:

    --建立表,执行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'

   

    作者 黄钊吉

最新文章