SqlServer中常用的一些操作语句

我们在维护数据库数据的时候,通常会用到各种SQL语句对数据进行操作或者维护,如:查看某个数据库中有哪些用户数据表、每个数据表中总共有多少条数据……

SqlServer官方地址:https://learn.microsoft.com/zh-cn/sql

1、🎉整理说明

我们在维护数据库数据的时候,通常会用到各种SQL语句对数据进行操作或者维护,如:查看某个数据库中有哪些用户数据表、每个数据表中总共有多少条数据……

因此,为了方便查阅,整理了如下相关语句。


2、🎁数据库相关

  • 查看数据文件占用情况

    --查看数据文件占用情况
    DBCC showfilestats;
    

    image

  • 查看日志文件占用情况

    --查看日志文件占用情况
    DBCC SQLPERF(LOGSPACE);
    

    image

  • 查询某数据库的文件的占用情况

    --查询某数据库的文件的占用情况
    SELECT a.name [文件名称],
    	   CAST(a.[size] * 1.0 / 128 AS DECIMAL(12, 1)) AS [文件设置大小(MB)],
    	   CAST(FILEPROPERTY(s.name, 'SpaceUsed') / (8 * 16.0) AS DECIMAL(12, 1)) AS [文件所占空间(MB)],
    	   CAST((FILEPROPERTY(s.name, 'SpaceUsed') / (8 * 16.0)) / (s.size / (8 * 16.0)) * 100.0 AS DECIMAL(12, 1)) AS [所占空间率%],
    	   CASE
    		   WHEN a.growth = 0 THEN
    			   '文件大小固定,不会增长'
    		   ELSE
    			   '文件将自动增长'
    	   END [增长模式],
    	   CASE
    		   WHEN a.growth > 0
    				AND a.is_percent_growth = 0 THEN
    			   '增量为固定大小'
    		   WHEN a.growth > 0
    				AND a.is_percent_growth = 1 THEN
    			   '增量将用整数百分比表示'
    		   ELSE
    			   '文件大小固定,不会增长'
    	   END AS [增量模式],
    	   CASE
    		   WHEN a.growth > 0
    				AND a.is_percent_growth = 0 THEN
    			   CAST(CAST(a.growth * 1.0 / 128 AS DECIMAL(12, 0)) AS VARCHAR) + 'MB'
    		   WHEN a.growth > 0
    				AND a.is_percent_growth = 1 THEN
    			   CAST(CAST(a.growth AS DECIMAL(12, 0)) AS VARCHAR) + '%'
    		   ELSE
    			   '文件大小固定,不会增长'
    	   END AS [增长值(%或MB)],
    	   a.physical_name AS [文件所在目录],
    	   a.type_desc AS [文件类型]
    FROM sys.database_files a
    	INNER JOIN sys.sysfiles s
    		ON a.[file_id] = s.fileid
    	LEFT JOIN sys.dm_db_file_space_usage b
    		ON a.[file_id] = b.[file_id]
    ORDER BY a.type;
    

    image

3、🎨数据表相关

  • 查询某数据库中的所有用户数据表

    --查询某数据库中的所有用户数据表
    SELECT name 表名称,object_id 表Id,create_date 创建时间,modify_date 修改时间 FROM sys.objects
    WHERE type='U'
    ORDER BY name;
    

    image

  • 查询出某数据库中每个用户数据表数据总条数

    --查询出某数据库中每个用户数据表数据总条数
    SELECT a.name 表名称,b.rows 数量 FROM sys.objects a
    LEFT JOIN sys.partitions b ON a.object_id=b.object_id
    WHERE a.type='U'
    ORDER BY a.name;
    

    image

  • 查询出某数据库中所有用户数据表数据总条数

    --查询出某数据库中所有用户数据表数据总条数
    SELECT SUM(b.rows) 总数量 FROM sys.objects a
    LEFT JOIN sys.partitions b ON a.object_id=b.object_id
    WHERE a.type='U';
    

    image


4、🏆数据查询相关

4.1、分页查询

  1. 使用ROW_NUMBER进行分页

在低版本(SqlServer 2005+)的SqlServer中,我们通常使用ROW_NUMBER方式对数据进行分页查询,使用方式如下所示:

--使用ROW_NUMBER方式对数据进行分页查询
SELECT *
FROM
(
    SELECT *,
           ROW_NUMBER() OVER (ORDER BY [CreateTime] DESC) AS RowIndex--生成序号新列RowIndex(按照CreateTime字段进行降序排列)
    FROM
    (
        SELECT *
        FROM Tb
        WHERE [CreateTime] <= '2023-12-01 23:59:59.999'
    ) temp
) T
WHERE RowIndex
BETWEEN 1 AND 20;--查询第1页,每页20条
--BETWEEN 21 AND 40;--查询第2页,每页20条
--BETWEEN 41 AND 60;--查询第3页,每页20条

2.使用OFFSET方式

SqlServer 2012+版本中,提供了新的分页数据查询方式OFFSET,使用方式如下所示:

--使用OFFSET方式对数据进行分页查询
SELECT *
FROM
(
    SELECT *
    FROM Tb
    WHERE [CreateTime] <= '2023-12-01 23:59:59.999'
) temp
ORDER BY [CreateTime] DESC
OFFSET 0 ROWS FETCH NEXT 20 ROWS ONLY;--查询第1页,每页20条
--OFFSET 20 ROWS FETCH NEXT 20 ROWS ONLY;--查询第2页,每页20条
--OFFSET 60 ROWS FETCH NEXT 20 ROWS ONLY;--查询第3页,每页20条

总结:上述两种分页数据查询方式,在相同的条件下,OFFSET方式的效率会提升1倍+,条件允许的情况下,推荐使用OFFSET方式!!!


持续更新中……

posted @ 2023-11-30 17:57  Qubernet  阅读(162)  评论(0编辑  收藏  举报
🛧