202102-21 浅析SQL Server的嵌套存储过程中使用同名的临时表怪像 SQLServer的嵌套存储过程,外层存储过程和内层存储过程(被嵌套调用的存储过程)中可以存在相同名称的本地临时表吗?如果可以的话,那么有没有什么问题或限制呢?在嵌套存储过程中,调用的是外层存储过程的临时表还是自己定义的临时表呢?是否类似高级语言的变量一样,本地临时表有没有“作用域“范围呢?注意:也可以称呼为父存储过程和子存储过程,外层存储过程和内层存储过程。这些只是不同的称呼或叫法而已。我们这里统一使... 继续阅读 >
202102-21 SQL中where和having的区别详解 概念wherewhere是一个约束声明,在查询数据库的结果返回之前对数据库中的查询条件进行约束,再返回结果前起作用,并且where后不能使用“聚合函数”。聚合函数对一组值执行计算,并返回单个值,也被称为组函数,经常与SELECT语句的GROUPBY子句的HAVING一同使用。例如AVG返回指定组中的平均值COUNT返回指定组中项目的数量MAX返回指定数据的最大值。MIN返回指定数据的最小值。SUM返回指定数据的和,只能用于数字列,空值被... 继续阅读 >
202102-21 SQL server高并发生成唯一订单号的方法实现 前言前几天写了一篇MySQL高并发生成唯一订单号的方法,有人私信问有没有SQLserver版本的,今天中午特地写了SQLserver版本的高并发生成唯一订单号实现,其实MySQL和SQLserver原理都一样,主要是他们部分语法有些区别,所以你会发现我这篇文章文字说明几乎一样,只有代码和界面不一样。一、场景再现在一个erp进销存系统或0A等其他系统中,如果多人同时进行生成订单号的操作的话,容易出现多人获得同一个订单号的情况,对公司业务... 继续阅读 >
202102-21 SQL查询包含下划线的字段内容操作 我就废话不多说了,大家还是直接看代码吧~SELECT*FROMscott.empwhereenamelike'%\_%'escape'\';SELECT*FROMscott.empwhereregexp_like(ename,'_');补充:sql字符带下划线匹配问题SQL中_下划线作用是匹配一个任意字符.如果我们要去掉下划线的作用单纯只用作一个字符则需要转义成 like'%\_%'escape'\'字段1.order_qrsc2.order_sc比如 我们是要 匹配like'%_sc'但是因为下划线本身... 继续阅读 >
202101-29 sql 实现将空白值替换为其他值 下图中数据库中查询到的值有空值,包括空白值(“”)和null如何将上图中的null和空白值替换为其他的值呢??有人建议使用isnull()函数,但是该函数只能替换null无法替换空白的值。可以使用下面的sql语句对null和空白值都替换为其他的值。select(CASEwhen(TelPhoneISNULLORTelPhone='')then'暂无'elseTelPhoneend)asTelPhone,(CASEwhen(NameisnullorName='')then'暂无'elseNameend)asname,(CASEwhen... 继续阅读 >
202101-22 SQL函数将某个字段合并在一起的操作 最近遇到需要将关联表中的某个字段全部查询出来并且重新组合为一个字段,这个时候普通的连接查询就满足不了需求了,需要用到SQL函数来完成:ALTERfunctiondbo.getResCodesByOwnerId(@OwnerIdINT)returnsnvarchar(2000)asbeginDECLARE@codesVARCHAR(2000)SET@codes=''select@codes=stuff((select','+residence_codefromcrm_ownercoleftjoincrm_owner_residencecoronco.id=cor.owner_idwhereco.id=@OwnerIdfor... 继续阅读 >
202101-21 关于SQL Server加密与解密的问题 一、PassPhrase加密1.1、概要简述1)对于不涉及证书及密钥的应急的数据加密,可以直接基于用户提供的密码来加密和解密数据。2)通行短语(PassPhrase)是允许存在空格的密码。这个PassPhrase不会存储在数据库中,因而也就意味着不会被使用存储的系统数据"破解"。同时,可以使用空格创建一个长的、易于记忆的句子来加密和解密敏感数据。3)PassPhrase支持的数据列类型有nvarchar、varchar、nchar、char、varbinary、binary。1.2、加密... 继续阅读 >
202101-21 Go基于GORM 获取当前请求所执行的 SQL 信息(思路详解) 前言为了便于精准排查问题,需要将当前的请求信息与当前执行的SQL信息设置对应关系记录下来,记录的SQL信息包括:执行SQL的当前时间;执行SQL的文件地址和行号;执行SQL的花费时长;执行SQL的影响行数;执行的SQL语句;数据库组件使用的是GORM。思路1、在执行SQL前,设置开始执行时间(计算执行时长会用到);2、在执行SQL后,第一,获取当前请求的上下文,为什么获取上下文,因为需要从上下文中获取... 继续阅读 >
202012-29 SQL Server重置IDENTITY属性种子值操作 SQLServer重置IDENTITY属性种子值--IDENTITY重置种子DBCCCHECKIDENT(表名,RESEED,0)补充:sqlserver修改IDENTITY字段的统计当前值一个表数据是从另一服务器同步过来的。现在数据已超过了3514万条,但插入值时,提示不能插入重复键值320.查看表的统计时间,看到是N年前统计的。手工更新表统计信息:UPDATESTATISTICSTABLE_NAME,再插入,还是无效。后使用代码:DBCCCHECKIDENT(TABLE_NAME,RESEED,35142192)--351421... 继续阅读 >
202012-29 解析SQL Server中datetimeset转换datetime类型问题 在SQLServer中,数据类型datetimeoffset转换为datetime类型或datetime2类型时需要特别注意,有可能一不小心你可能会碰到下面这种情况。下面我们构造一个简单案例,模拟一下你们可能遇到的情况。CREATETABLETEST(IDINTIDENTITY(1,1),CREATE_TIMEDATETIME,CONSTRAINTPK_TESTPRIMARYKEY(ID));GOINSERTINTOTEST(CREATE_TIME)SELECT'2020-10-0311:10:36'UNIONALLSELECT'2020-10-0311:11:36'UNION... 继续阅读 >
202012-29 在sql中实现取一行最大值或者最小值 原始数据和目标数据实现SQL语句(最大)selectshop,month,greatest(dz,fz,sp)asmaxfromtablename;实现SQL语句(最小)selectshop,month,least(dz,fz,sp)asminfromtablename;补充:SQLServer获取一行中多列的最大值三种方法有些时候我们需要从一个表的多个列中获取一个最大值(这些列的数据类型相同,并且是每一行记录都要获取一个最大值)。下面讲了三种方法,我们一起看下。首先我们创建一个表,并在表中插入需要用到的记录,如... 继续阅读 >
202012-07 浅析SQL Server授予了CREATE TABLE权限但是无法创建表 在SQLServer中,如果我想授予一个用户klb拥有创建表的权限,但是我又不想授予其数据库角色db_ddladmin,因为这样会扩大其权限,那么授予下面权限可行吗?如下所示:USEAdventureWorks2014;GOGRANTCREATETABLETOklb;那么这样授权是否就OK呢?答案是这样授权会报错“Thespecifiedschemaname"dbo"eitherdoesnotexistoryoudonothavepermissiontouseit.”需要授予下面权限,登录名klb才能真正的创建表。USEAdve... 继续阅读 >
202012-07 SQL Server 批量插入数据的完美解决方案 一、SqlServer插入方案介绍关于SqlServer批量插入的方式,有三种比较常用的插入方式,Insert、BatchInsert、SqlBulkCopy,下面我们对比以下三种方案的速度1.普通的Insert插入方法publicstaticvoidInsert(IEnumerable<Person>persons){using(varcon=newSqlConnection("Server=.;Database=DemoDataBase;UserID=sa;Password=8888;")){con.Open();foreach(varpersoninpersons){using(varcom=... 继续阅读 >
202012-02 mybatis-plus分页传入参数后sql where条件没有limit分页信息操作 折腾了差不多两个小时,各种方法尝试,后来想想应该是where过滤后的数据量没有达到默认一页规定的数量所以干脆where就不显示limit信息了,试了一下还真是。。。这作者还真是把程序做的足够智能,可是这个智能也让我白白花掉了两个小时。。。还是自己太笨了……但是奇怪的是,如果我不设置QueryWrapper参数,where后面的分页限制又是可以出来的。百思不得其解作者的想法。。。具体看代码:@OverridepublicPageUtilsqueryPage(Map... 继续阅读 >
202011-29 SQL分组函数group by和聚合函数(COUNT、MAX、MIN、AVG、SUM)的几点说明 1分组聚合的原因SQL中分组函数和聚合函数之前的文章已经介绍过,单说这两个函数有可能比较好理解,分组函数就是groupby,聚合函数就是COUNT、MAX、MIN、AVG、SUM。拿上图中的数据进行解释,假设按照product_type这个字段进行分组,分组之后结果如下图。SELECTproduct_typefromproductgroupbyproduct_type从图中可以看出被分为了三组,分别为厨房用具、衣服和办公用品,就相当于对product_type这个字段进行了去重,确实group... 继续阅读 >
202011-29 Mysql sql慢查询监控脚本代码实例 1、修改my.cnf#整体的效果,全局开启表和日志文件都写,但是对于general_log只写表,对于slow_query_log,表和日志文件都记录。general_log=1#开启mysql执行sql的日志slow_query_log=1#开启mysql慢sql的日志#设置之后会影响general_log和slow_query_log,log_output=table,File#日志输出会写表,也会写日志文件,为了便于程序去统计,所以最好写表#这里没配置general_log_file,那么general_log就只会写表了#在mysql5.1.29以上,... 继续阅读 >