SQL Server检索包含某个关键字的所有列名

在项目中,有的时候会遇到一些需求,需要从一个巨大的数据库里找到所有包含某个关键字的列,以及它所在的表。下面的SQL可以快速解决这个问题。

SELECT distinct t.name AS table_name,
SCHEMA_NAME(schema_id) AS schema_name,
c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%keyword%'
ORDER BY schema_name, table_name

使用方法,只要把上面语句中keyword换成你想要的检索的关键字就可以了。

举个例子,我想知道当前的数据库里,有哪些表里带有包含了Discount的字段,结果如下所示

image

SQL Server找出最占存储空间的表

今天在有台服务器硬盘突然告警了,排查了一下发现是SQL Server的mdf文件太大,把硬盘给撑爆了。所以就有一个需求要在SQL Server里找出占用存储空间最多的表,进行清理。

下面是Amber和Qing贡献的一个SQL查询和运行效果。

CREATE TABLE #temp (   
table_name sysname ,   
row_count INT,   
reserved_size VARCHAR(50),   
data_size VARCHAR(50),   
index_size VARCHAR(50),   
unused_size VARCHAR(50))   
SET NOCOUNT ON   
INSERT #temp   
EXEC sp_msforeachtable 'sp_spaceused ''?'''   
SELECT a.table_name,   
a.row_count,   
COUNT(*) AS col_count,   
a.data_size   
FROM #temp a   
INNER JOIN information_schema.columns b   
ON a.table_name collate database_default   
= b.table_name collate database_default   
GROUP BY a.table_name, a.row_count, a.data_size   
ORDER BY CAST(REPLACE(a.data_size, ' KB', '') AS integer) DESC   
DROP TABLE #temp   

输出结果如下图所示

Table_Name

Row_count

Col_count

DataSize

tbl_TR_SubtaskTrail

26962623

12

48679192 KB

tbl_TR_TaskTrail

7656102

25

7120016 KB

tbl_TR_AuditTrail

3361530

8

3410224 KB

tbl_TR_TaskTrailUserAccess

23569366

5

2882992 KB

tbl_PCMT_PerfHistory_Raw

3835883

4

650904 KB

tbl_PCMT_PerfHistory_Hourly

1982372

4

342872 KB

tbl_TR_DeletedObject

1320476

4

279712 KB

tbl_PCMT_PerfHistory_Daily

1393939

4

193592 KB

tbl_WLC_VMInstance

12692

77

108144 KB

tbl_WLC_VNetworkAdapter

41212

42

100376 KB

tbl_PCMT_TieredPerfCounter

257699

41

95336 KB

SQL Server里用Split函数分割字符串

这2天在写存储过程的时候发现SQL里没有Split函数在需要分割字符串的时候很是不方便,比如有时候存储过程某个参数是个用逗号做分隔符的字符串,就需要用到Split了。本着不重复制造轮子的原则,先上网搜索了一下,果然已经有兄弟实现了Split方法并且无私共享了代码。 Continue reading SQL Server里用Split函数分割字符串