面试题:求SQL语句:求数据库内各表大小,并排序列出

几天去浦东一家公司去面试,感觉有一道关于数据库查询的题目没答好,自我总结下,下次注意。

题目:求数据库内各表大小,并排列出。写出相应的SQL语句。

代码如下:

CREATE PROCEDURE [dbo].[GetTableSpace]
@dbName     sysname = ‘‘,       --数据库名,默认当前数据库
@tableName  sysname = ‘‘,       --表名,默认全部表
@columnName varchar(50) = ‘‘,   --列名,排序用
@sort       varchar(4) = ‘‘     --asc升序,desc降序
AS
IF (@dbName = ‘‘) SET @dbName = DB_Name()
ELSE IF (CHARINDEX(‘M0A2_DB2‘,@dbName) > 0) SET @dbName = ‘M0A2_DB2.‘ + @dbName
IF (@tableName = ‘‘) SET @tableName = ‘%‘
IF (@columnName = ‘‘) SET @columnName = ‘name‘
IF (@sort = ‘‘) SET @sort = ‘asc‘

EXEC (‘SELECT  a.name,rows as int,(reserved * 8) reserved,(data * 8)data,
((CASE WHEN used > data THEN (used - data) ELSE 0 END) * 8)index_size,
((CASE WHEN reserved > used THEN (reserved - used) ELSE 0 END) * 8)unused
 FROM ‘ + @dbName + ‘.sys.tables a INNER JOIN
(SELECT object_id,SUM (reserved_page_count)reserved,SUM (used_page_count)used,
SUM (CASE
  WHEN (index_id < 2) THEN (in_row_data_page_count + lob_used_page_count + row_overflow_used_page_count)
  ELSE lob_used_page_count + row_overflow_used_page_count END)data,
SUM (CASE WHEN (index_id < 2) THEN row_count ELSE 0    END)rows
FROM ‘ + @dbName + ‘.sys.dm_db_partition_stats GROUP BY object_id)b
ON a.object_id = b.object_id WHERE a.name LIKE ‘‘‘ + @tableName + ‘‘‘ ORDER BY ‘ + @columnName + ‘ ‘ + @sort)
GO
exec GetTableSpace ‘‘,‘‘,‘data‘,‘desc‘
时间: 2024-10-12 10:47:06

面试题:求SQL语句:求数据库内各表大小,并排序列出的相关文章

SQL删除一个数据库内所有表的数据保留表结构

实现思路: 1.禁用所有约束,外键 2.禁用所有触发器 3.删除表数据 4.开启触发器 5.开启约束 CREATE PROCEDURE proc_deleteDateSql /* 生成清除数据库表数据的脚本方法分享 */ AS EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL' EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL' EXEC sp_MSForEa

PHP如何通过SQL语句将数据写入MySQL数据库呢?

1,php和MySQL建立连接关系 2,打开 3,接受页面数据,PHP录入到指定的表中 1.2两步可直接使用一个数据库链接文件即可:conn.php <?phpmysql_connect("localhost","root","");//连接MySQLmysql_select_db("hello");//选择数据库?> 当然,前提是已经安装WEB服务器.PHP和MySQL,并且建立MySQL表“webjx” mys

SQL语句之 数据约束

SQL语句之 数据约束 什么是数据约束 数据约束用来限制用户对数据的非法的修改操作. 1.约束字段的默认值 如果插入记录时,没有给某个字段赋值,那么我们可以设置它的默认值 关键字:default CREATE TABLE test1( tin INT, tname VARCHAR(20) DEFAULT '待定' ); INSERT INTO test1(tin) VALUES (1); SELECT * FROM test1; 2.非空约束 约束一个字段,使它的值不能为空 关键字: not n

在SQLServer中使用SQL语句插入数据出现乱码或问号的解决方法

错误产生的原因: 出现使用SQL语句插入数据出现乱码或问号是由于数据库属性的排序规则设置不正确. 解决方法: 方法一:手动修改(设置数据库的排序规则) 注意事项:要确定修改的数据库没有被使用,否则会失败! 具体步骤:选中要修改的数据库-->右键-->属性-->弹出数据库属性对话框-->选项-->把排序规则设置成: Chinese_PRC_90_CI_AS-->确定. 方法二:使用代码修改 注意事项:要确定修改的数据库没有被使用,否则会失败!(将数据库连接断开执行这个脚本

SQL语句汇总(终篇)—— 表联接与联接查询

既然是最后一篇那就不能只列出些干枯的标准语句,更何况表联接也是SQL中较难的部分,所以此次搭配题目来详细阐述表联接. 上一篇博文说到相关子查询效率低下,那我们怎么能将不同表的信息一起查询出来呢?这就需要用到表联接. 和之前的UNION组合查询不同,UNION是将不同的表组合起来,也就是纵向联接,说白了就是竖着拼起来. 而表联接是通过笛卡尔乘积将表进行横向联接,所谓的通过笛卡尔乘积简单说就是两表的行依次相联再相加.要想更详细的理解可以百度下,毕竟本文主要是汇总SQL语句. 现在有如下两张表: 这是

SQL语句汇总(一)——数据库与表的操作以及创建约束

首先,非常感谢大家对上篇博文的支持,真是让本菜受宠若惊,同时对拖了这么久才出了此篇表示抱歉. 前言:此文旨在汇总从建立数据库到联接查询等绝大部分SQL语句.SQL语句虽不能说很多,但稍有时间不写就容易出错.博主希望通过此文来战胜自己的健忘,如果大家认可也可以保留起来. "SQL"是 "Structured Query Language" 即“结构化查询语言”的简称,它是用来管理关系型数据库的. 其包括: –数据定义语言(DDL) –数据查询语言(DQL) –数据操作

怎样用sql语句复制表table1到表table2的同时复制主键

原文:怎样用sql语句复制表table1到表table2的同时复制主键 在从table1表复制到table2的时候,我们会用语句: select * into table2 from table1 但这个语句并不能在复制数据的同时,复制主键. 下面的代码通过动态语句,来实现在复制数据的同时,也会复制主键: if OBJECT_ID('table1') is not null drop table table1 go create table table1 ( id int , idd int,

sql语句,怎么查看一个表中的所有约束

sql语句,怎么查看一个表中的所有约束,比如,一个student表,有唯一,外键,主键,用sql语句怎么查看student表中的所有约束呢? select * from sysobjects where parent_obj in(select id from sysobjects where name='student')

sql语句求百分比

此sql语句包括了两个聚合函数做除法求百分比,并保留两位小数,直接输出字符串形式的百分比.以及对case when在聚合函数的应用. SELECT ss.SS_NAME,SS_ID, COUNT(ea.EA_ID) AS EACounts,--回单交换单个数 COUNT(eb.EB_ID) AS EBCounts,--交换单个数 COUNT(ps.PS_ID) AS PSCounts,--签收单个数 COUNT(SW_ID) AS SWCounts,--运单数个数 COUNT(CASE WHEN