您现在的位置是:亿华云 > 系统运维
数据库干货:整理SQL Server非常实用的脚本
亿华云2025-10-03 13:57:54【系统运维】9人已围观
简介今天给大家分享自己在工作当中用到的SQLServer一些常用的脚本,希望能对大家有所帮助!1、 查询数据库所有表结构通过该脚本可以快速查找表字段,或者生成数据库设计文档、进行数据库对比。SELECTo
今天给大家分享自己在工作当中用到的数据实用SQLServer一些常用的脚本,希望能对大家有所帮助!
1、库干 查询数据库所有表结构
通过该脚本可以快速查找表字段,货整或者生成数据库设计文档、非常进行数据库对比。数据实用
SELECT obj.name 表名,库干 col.colorder AS 序号 , col.name AS 列名 , ISNULL(ep.[value], ) AS 列说明 , t.name AS 数据类型 , CASE WHEN col.isnullable = 1 THEN 1 ELSE END AS 允许空 , ISNULL(comm.text, ) AS 默认值, Coalesce(epTwo.value, ) AS documentation FROM dbo.syscolumns col LEFT JOIN dbo.systypes t ON col.xtype = t.xusertype inner JOIN dbo.sysobjects obj ON col.id = obj.id AND obj.xtype = U AND obj.status >= 0 LEFT JOIN dbo.syscomments comm ON col.cdefault = comm.id LEFT JOIN sys.extended_properties ep ON col.id = ep.major_id AND col.colid = ep.minor_id AND ep.name = MS_Description LEFT JOIN sys.extended_properties epTwo ON obj.id = epTwo.major_id AND epTwo.minor_id = 0 AND epTwo.name = MS_Description WHERE obj.name in( SELECT ob.name FROM sys.objects AS ob LEFT OUTER JOIN sys.extended_properties AS ep ON ep.major_id = ob.object_id AND ep.class = 1 AND ep.minor_id = 0 WHERE ObjectProperty(ob.object_id, IsUserTable) = 1 ) ORDER BY obj.name ;2、SQLServer 查询数据库各个数据表、货整索引文件占用的非常存储空间
可以快速查询数据库中表、索引占用的数据实用存储空间,找到哪些表占用了大量的亿华云计算库干存储空间,便于进行数据库优化。货整
CREATE PROCEDURE [dbo].[sys_viewTableSpace] AS BEGIN SET NOCOUNT ON; CREATE TABLE [dbo].#tableinfo( 表名 [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,非常 记录数 [int] NULL, 预留空间 [varchar](50) COLLATE Chinese_PRC_CI_AS NULL, 使用空间 [varchar](50) COLLATE Chinese_PRC_CI_AS NULL, 索引占用空间 [varchar](50) COLLATE Chinese_PRC_CI_AS NULL, 未用空间 [varchar](50) COLLATE Chinese_PRC_CI_AS NULL ) insert into #tableinfo(表名, 记录数, 预留空间, 使用空间, 索引占用空间, 未用空间) exec sp_MSforeachtable "exec sp_spaceused ?" select * from #tableinfo order by 记录数 desc drop table #tableinfo END -- 执行方法 exec sys_viewtablespace3、清理数据库日志文件
数据库日志文件一般都会非常大,数据实用甚至占用超过几百G甚至上T,库干如果不需要进行一直保留数据库日志文件,货整可以建一个数据库作业,定时清理数据库日志文件,具体可以采用下面的脚本。
USE master ALTER DATABASE DB SET RECOVERY SIMPLE WITH NO_WAIT ALTER DATABASE DB SET RECOVERY SIMPLE --调整为简单模式 USE DB DBCC SHRINKFILE (NDB_log , 2, TRUNCATEONLY) --设置压缩后的日志大小为2M,可以自行指定 USE master ALTER DATABASE DB SET RECOVERY FULL WITH NO_WAIT ALTER DATABASE DB SET RECOVERY FULL --还原为完全模式4、网站模板SQLServer查看锁表和解锁
工作中遇到查询的时候一直查询不出来结果,可以执行该脚本判断是否锁表,然后解锁就可以正常查询数据了。
-- 查询被锁表 select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName from sys.dm_tran_locks where resource_type=OBJECT; --参数说明 spid 锁表进程 ;tableName 被锁表名 -- 解锁语句 需要拿到spid然后杀掉缩表进程 declare @spid int Set @spid = 57 --锁表进程 declare @sql varchar(1000) set @sql=kill +cast(@spid as varchar) exec(@sql)5、SQLServer生成日期维度表
该脚本可以生成一个日期维度的数据表,通过该数据表可以解决很多报表查询问题。非常实用。
--1、创建数据表 T_Date CREATE TABLE [dbo].[T_Date]( [the_date] [int] NOT NULL, [date_name] [nvarchar](30) NULL, [the_year] [int] NULL, [year_name] [nvarchar](30) NULL, [the_quarter] [int] NULL, [quarter_name] [nvarchar](30) NULL, [the_month] [int] NULL, [month_name] [nvarchar](30) NULL, [the_week] [int] NULL, [week_name] [nvarchar](30) NULL, [week_day] [int] NULL, [week_day_name] [nvarchar](30) NULL, CONSTRAINT [PK_T_Date] PRIMARY KEY CLUSTERED ( [the_date] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO -- 2、创建生成日期的云南idc服务商存储过程 GO /很赞哦!(89974)