首页 > 数据库 > SQL Server > 正文
使用一个T-SQL语句批量查询数据表占用空间及其行数
2012-07-04       个评论      
收藏    我要投稿

使用一个T-SQL语句批量查询数据表占用空间及其行数
 
要找到数据库中数据表占用的空间和存在的行数。可以使用sp_spaceused搭配数据表的名称。就可以产生该表耗用的空间和现有行数。
如:  www.2cto.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触发器,执行动态表达式。并且自动将输入的数据表,计算结果:
--建立表,执行insert触发器
USE AdventureWorks
GO  www.2cto.com  
CREATE TABLE myTab
(
    TableName VARCHAR(255)
)
GO
 
--建立触发器:
CREATE TRIGGER tr2 ON myTab
AFTER INSERT
AS
    DECLARE @sql VARCHAR(max)
    SET @sql=''  www.2cto.com  
        --使用累加字符串,产生语句
    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'


 
 
 
作者 黄钊吉
点击复制链接 与好友分享!回本站首页
相关TAG标签 数据表 语句 空间
上一篇:T-SQL技术收集——删除重复数据
下一篇:SQL SERVER孤立用户问题解决方法
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做实用的IT技术学习网站