今天给大家分享自己在工作当中用到的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 documentationFROM dbo.syscolumns colLEFT JOIN dbo.systypes t ON col.xtype = t.xusertypeinner JOIN dbo.sysobjects obj ON col.id = obj.idAND obj.xtype = 'U'AND obj.status >= 0LEFT JOIN dbo.syscomments comm ON col.cdefault = comm.idLEFT JOIN sys.extended_properties ep ON col.id = ep.major_idAND col.colid = ep.minor_idAND ep.name = 'MS_Description'LEFT JOIN sys.extended_properties epTwo ON obj.id = epTwo.major_idAND epTwo.minor_id = 0AND epTwo.name = 'MS_Description'WHERE obj.name in(SELECTob.name FROM sys.objects AS obLEFT OUTER JOIN sys.extended_properties AS epON ep.major_id = ob.object_idAND ep.class = 1AND ep.minor_id = 0WHERE ObjectProperty(ob.object_id, 'IsUserTable') = 1 )ORDER BY obj.name ;

2、SQLServer 查询数据库各个数据表、索引文件占用的存储空间

可以快速查询数据库中表、索引占用的存储空间,找到哪些表占用了大量的存储空间,便于进行数据库优化。

CREATE PROCEDURE [dbo].[sys_viewTableSpace]ASBEGINSET 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 #tableinfoorder by 记录数 descdrop table #tableinfoEND-- 执行方法exec sys_viewtablespace

3、清理数据库日志文件

数据库日志文件一般都会非常大,甚至占用超过几百G甚至上T,如果不需要进行一直保留数据库日志文件,可以建一个数据库作业,定时清理数据库日志文件,具体可以采用下面的脚本。

USE masterALTER DATABASE DB SET RECOVERY SIMPLE WITH NO_WAITALTER DATABASE DB SET RECOVERY SIMPLE --调整为简单模式USE DBDBCC SHRINKFILE (N'DB_log' , 2, TRUNCATEONLY) --设置压缩后的日志大小为2M,可以自行指定USE masterALTER DATABASE DB SET RECOVERY FULL WITH NO_WAITALTER 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_DateCREATE 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、创建生成日期的存储过程GO/****** Object: StoredProcedure [dbo].[SP_CREATE_TIME_DIMENSION]  ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROCEDURE [dbo].[SP_CREATE_TIME_DIMENSION]@begin_date nvarchar(50)='2015-01-01' ,@end_date nvarchar(50)='2030-12-31'as/*SP_CREATE_TIME_DIMENSION: 生成时间维数据begin_date: 开始时间end_date:结束时间*/declare @dDate date=convert(date,@begin_date),@v_the_date varchar(10),@v_the_year varchar(4),@v_the_quarter varchar(2),@v_the_month varchar(10),@v_the_month2 varchar(2),@v_the_week varchar(2),@v_the_day varchar(10),@v_the_day2 varchar(2),@v_week_day nvarchar(10),@adddays int=1;WHILE (@dDate<=convert(date,@end_date))beginset @v_the_date=convert(char(10),@dDate,112);--key值格式为yyyyMMddset @v_the_year=DATEPART("YYYY",@dDate);--年份set @v_the_quarter=DATEPART("QQ",@dDate);--季度set @v_the_month=DATEPART("MM",@dDate);--月份(字符型)set @v_the_day=DATEPART("dd",@dDate);--日(字符型)set @v_the_week=DATEPART("WW",@dDate);--年的第几周set @v_week_day=DATEPART("DW",@dDate); --星期几-- 插入数据insert into T_Date(the_date,date_name,the_year,year_name,the_quarter, quarter_name,the_month,month_name,the_week,week_name,week_day,week_day_name)values(@v_the_date,convert(nvarchar(10),@v_the_year)+'年'+convert(nvarchar(10),@v_the_month)  +'月'+convert(nvarchar(10),@v_the_day)+'日',@v_the_year,convert(nvarchar(10),@v_the_year)+'年',@v_the_quarter,convert(nvarchar(10),@v_the_year)+'年'+convert(nvarchar(10),@v_the_quarter)+'季度',case when @v_the_month>=10 then convert(int,(convert(nvarchar(10),@v_the_year)+convert(nvarchar(10),@v_the_month)))else convert(int,convert(nvarchar(10),@v_the_year)+'0'             +convert(nvarchar(10),@v_the_month)) end,convert(nvarchar(10),@v_the_year)+'年'+convert(nvarchar(10),@v_the_month)+'月',@v_the_week,'第'+convert(nvarchar(10),@v_the_week)+'周',@v_week_day,case @v_week_day-1 when 1 then '星期一' when 2 then '星期二' when 3 then '星期三'when 4 then '星期四' when 5 then '星期五' when 6 then '星期六'when 0 then '星期日'else '' end);set @dDate=dateadd(day,@adddays,@dDate);continueif @dDate=dateadd(day,-1,convert(date,@end_date))breakend-- 3、执行存储过程生成数据GODECLARE @return_value intEXEC    @return_value = [dbo].[SP_CREATE_TIME_DIMENSION]SELECT    'Return Value' = @return_valueGO

sqlserver date转nvarchar_数据库干货:整理SQLServer非常实用的脚本相关推荐

  1. oracle数据转成sqlserver,oracle数据库转换到Sqlserver的几点经验

    应广大朋友的要求,本人将<PB-ORACLE通用开发框架2.1>版本的程序 成功转换到SQLServer下,下面是我总结的几条经验,与大家分享,有不 1.数据类型的转换  建立两个数据源b ...

  2. Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务

    Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务 参考博客:http://blog.csdn.net/zhyl8157121/article/d ...

  3. 从sql抽到mysql_找到一种不错的从SQLServer转成Mysql数据库的方法

    找到一种不错的从SQLServer转成Mysql数据库的方法 2021-01-23 12:34:084 年初的时候一直在做一个网站MSSQL2000->MySQL5的迁移工作,因为采用了不同的程 ...

  4. SqlServer中获取所有数据库,所有表,所有字段

    SqlServer中获取所有数据库,所有表,所有字段 原文:SqlServer中获取所有数据库,所有表,所有字段 一.获取所有数据库 select * from master.dbo.SysDatab ...

  5. 【Java】JDBC连接MySQL/SQLServer/Oracle三种数据库

    JDBC连接MySQL数据库 import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLExcepti ...

  6. 科研项目管理系统(asp.net+sqlserver)【源码+数据库脚本+论文】

    科研项目管理系统  (ASP.NET,SQLServer)(毕业论文10762字以上,共45页,程序代码,SQLServer数据库)                                  ...

  7. access对比数据_七大数据库产品测评Sqlserver完美胜出,五大理由告诉你最好选择...

    虽说各家数据库产品大同小易,学会一家,其他家都可以很快上手,但和编程语言的选择一样,人的精力有限下,只能深入研究一家的产品.故在学习之前,认真去评估应该选择哪一家数据库学习,这样的时间也很值得,总比学 ...

  8. 「Sqlserver」数据分析师有理由爱Sqlserver之三-最值得使有低投入高产出的Sqlserver功能...

    数据分析师群体,有别于一般的传统开发群体和数据库运维群体,对Sqlserver的功能需求上也各不相同,本篇以笔者的亲身经历,用一种有别于一般性教程的角度来讲解Sqlserver值得我们学习,投入产出比 ...

  9. CMDS目的端数据库碎片整理记录

    CMDS目的端数据库碎片整理记录 看看数据库里面需要做整理的表有哪些,条件可以根据需求稍微改动一下 SQL> select * from ( 2 select a.owner, 3 a.tabl ...

最新文章

  1. 深度学习 | GAN模式崩溃的理论解释
  2. 分析了 600 多种烘焙配方,机器学习开发出新品
  3. python.freelycode.com-不完整的Http读取和Python中的Requests库
  4. Java项目编译时经常会出现不编译,或者报一些假性错误
  5. mysql不可重读读
  6. 20165230 《Java程序设计》实验五《网络编程与安全》实验报告
  7. Github中国区Star超过1W的大佬和他们的公众号,太强了!
  8. Android学习第十三天----ScrollView
  9. 游戏桌面壁纸|英雄联盟,热爱游戏的朋友看这里
  10. 为什么越来越少的人用 jQuery?
  11. java 小数精度问题
  12. 【5分钟 Paper】Reinforcement Learning with Deep Energy-Based Policies
  13. cad隐藏图层命令快捷键_cad与天正局部隐藏对象大法
  14. access建立er图_Visio绘制ER图教程
  15. matlab 数值计算方法 pdf,《现代数值计算方法(MATLAB版)》习题解答.pdf
  16. c语言约分最简分式原理,算法基础:约分最简分式
  17. 后盾网Laravel 5.2开发实战视频
  18. C#MessageBox 自动关闭窗口
  19. Java实现读Chuck数据
  20. 【git 常用配置及常用命令】

热门文章

  1. matlab平面绘图命令
  2. TensorRT学习笔记2 - 基础知识
  3. 最大匹配 人员分配[邻接矩阵]
  4. 零件分组pascal程序
  5. 导航模块自带的rtk算法_这款百元国产RTK板卡要改变高精度定位市场格局吗?
  6. sqlserver 分页_四类数据库分页实现方案总结之PG分页实现
  7. pythonweb开发需要学哪些知识,python web需要了解哪些
  8. Linux基础练习题(三)
  9. Codeforces732D Exams
  10. js跨浏览器事件处理