使用一个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语句批量查询数据表占用空间及其行数的更多相关文章
- 使用Sql语句快速将数据表转换成实体类
开发过程中经常需要根据数据表编写对应的实体类,下面是使用sql语句快速将数据表转换成对应实体类的代码,使用时只需要将第一行'TableName'引号里面的字母换成具体的表名称就行了: declare ...
- sqlserver 查询所有表及记录行数
--查询所有表名 select name from sysobjects where xtype='u' select * from sys.tables --查询所有表名及对应架构 select t ...
- Java使用JDBC连接数据库逐条插入数据、批量插入数据、以及通过SQL语句批量导入数据的效率对比
测试用的示例java代码: package com.zifeiy.test.normal; import java.io.File; import java.io.FileOutputStream; ...
- Sql语句批量更新数据(多表关联)
最近在项目中遇到一个问题,原来设计的功能是不需要一个特定的字段值depid的,但是新的功能需要根据depid来展现,于是出现了这样一个问题,新增加的数据都有正确的depid,而原来的大量的数据就没有d ...
- EF5中 执行 sql语句使用Database.ExecuteSqlCommand 返回影响的行数 ; EF5执行sql查询语句 Database.SqlQuery 带返回值
一: 执行sql语句,返回受影响的行数 在mysql里面,如果没有影响,那么返回行数为 -1 ,sqlserver 里面 还没有测试过 using (var ctx = new MyDbConte ...
- OLEDB不使用SQL语句直接打开数据表
一般来说获取数据库表的方法是采用类似 select * from table_name 这样的sql语句.SQL语句必然伴随着数据库的解释执行,一般来说效率比较低下,而且使用SQL语句时需要数据库支持 ...
- Entity Framework 使用sql语句分页(查询单表)
1.查询单表 var pageSize = 2;//条数 var pageIndex = 2;//索引 var sql = @" SELECT D.* FROM ( SELECT ROW_N ...
- Sql语句优化-查询两表不同行NOT IN、NOT EXISTS、连接查询Left Join
在实际开发中,我们往往需要比较两个或多个表数据的差别,比较那些数据相同那些数据不相同,这时我们有一下三种方法可以使用:1. IN或NOT IN,2. EXIST或NOTEXIST,3.使用连接查询(i ...
- sql server 批量删除数据表
SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Auth ...
随机推荐
- css中换行的几种方式
1.white-space:normal; 这个只针对中文有效 2.word-break:break-all; 强制换行,针对中文,数字,英文等都有效: 3.word-wrap:break-wo ...
- hihocoder第42周 k*N骨牌覆盖(状态dp+矩阵快速幂)
上周的3*N的骨牌,因为状态只有8中,所以我们可以手算出状态转移的矩阵 但是这周是k*N,状态矩阵不好手算,都是我们改成用程序自动生成一个状态转移的矩阵就行了,然后用这个矩阵进行快速幂即可 枚举枚举上 ...
- Coreseek:部门查询和增量索引代替实时索引
1.行业调查 索引系统需要通过主查询来获取所有的文档信息,一个简单的实现是整个表的数据到内存,但是这可能会导致整个表被锁定,并且使其它操作被阻止(例如:在MyISAM格款式上INSERT操作).同时, ...
- datagrid标题头粗体
//标题头粗体 //$("#R_datagrid .datagrid-header-row td div span").each(function (i, th) { ...
- jvm调音
jvm性能调优的目地:1)控制jvm的堆栈大小.比方当你的程序年轻代对象在某个时间段产生的比較多的时候,就须要控制年轻代的堆大小. 同一时候还要控制总的JVM大小避免内存溢出 2)控制GC的行为. G ...
- VS2012 添加服务引用常见错误
问题:用vs2012 添加wcf引用时在对象查看器中找不到 服务引用的类 例如默认高级配置: 解决办法:在服务的高级配置中,将重新使用引用的程序集中的类型 选项勾去掉 点击确定 即可
- [MSSQL]最小公约数
[摘要]一个朋友在展BOM的时候有这种需求,两列字段(数值):A ,B A=用量,B=底数,组成用量=用量/底数.A/B,若能被整除,显示整除的结果,若不能整除显示分数形式A/B(分数形式要是约分 ...
- MongoDB学习笔记-认识MongoDB
学习参考地址 http://www.runoob.com/mongodb NoSql 流行的数据库Oracle,SqlServer,MySql为关系性数据库,相对的,也有非关系性数据库,统称为NoSq ...
- 座IO理解力
一般堵塞IO服务器通信,通常有一个单独的Acceptor线程负责监控client联系,它接收client对于每个请求连接后client分配用于处理一个新的线程,处理后.返回应答给client.线程才销 ...
- STL源代码剖析(一) - 内存分配
Allocaor allocator 指的是空间配置器,用于分配内存.STL中默认使用SGI STL alloc作为STL的内存分配器,尽管未能符合标准规格,但效率上更好.SGI STL也定义有一个符 ...