张工的SQL Server经验心得

主要分享一些个人的SQL Server编程开发优化经验心得。个人公众号【SQL数据库编程】(微信号:zhang502219048)

博客园 首页 新随笔 联系 订阅 管理

2023年3月14日 #

摘要: 场景:数据库某个表,软件产品的唯一规则是字段A;而某一软件项目比较特殊,唯一规则是字段A+字段B 阅读全文
posted @ 2023-03-14 09:02 张工502219048 阅读(107) 评论(0) 推荐(0) 编辑

2022年11月6日 #

摘要: 转载自作者zhang502219048的微信公众号【SQL数据库编程】:Sql Server性能排查和优化懒人攻略 很多年前,笔者那时刚从广东技术师范学院(现为广东技术师范大学,以前为广东民族学院)的计算机科学学院计算机科学与技术(师范)专业(广东专插本,本科插本生,跨专业)毕业不久,还没怎么了解索 阅读全文
posted @ 2022-11-06 11:14 张工502219048 阅读(305) 评论(1) 推荐(0) 编辑

2021年6月21日 #

摘要: 数据库优化中的一个实例,记录一下: 1. 原来用了CTE公用表达式的递归,reads高达约40万,看查询执行计划,使用了Nested Loops; 2. 优化去掉递归,改用其它方式实现,reads降低到2639,看查询执行计划,避免了使用Nested Loops. 欢迎转载,但转载请务必注明博文来源 阅读全文
posted @ 2021-06-21 08:35 张工502219048 阅读(440) 评论(3) 推荐(0) 编辑

2021年5月8日 #

摘要: 数据库优化中的一个实例,记录一下: 原来用了distinct,reads高达2万多; 优化去掉distinct,reads降低到20. 欢迎转载,但转载请务必注明博文来源和作者!* 来源:https://www.cnblogs.com/zhang502219048/p/14743424.html* 阅读全文
posted @ 2021-05-08 07:31 张工502219048 阅读(522) 评论(0) 推荐(0) 编辑

2021年4月1日 #

摘要: 未用文字标明内容原文链接: CSDN https://blog.csdn.net/xiaozhendi123/article/details/109821383 阅读全文
posted @ 2021-04-01 20:25 张工502219048 阅读(99) 评论(0) 推荐(0) 编辑

2020年12月12日 #

摘要: 一、问题 原来有三个充值订单,现在要退款450元,如何分配才能让本次退款涉及的充值订单数量最少?具体数据参考下图: 二、解决方案 Step 1:对可退金额进行降序排列,以便优先使用可退金额比较大的订单 Step 2:使用CTE公用表达式,递归方式实现类似for或while循环或游标的功能 三、脚本 阅读全文
posted @ 2020-12-12 23:26 张工502219048 阅读(597) 评论(0) 推荐(0) 编辑

2020年9月5日 #

摘要: 问题: mon dd yyyy英文日期格式转换为一般的日期格式,在中文环境中,直接执行转换脚本会报错:消息 241,级别 16,状态 1,第 1 行从字符串转换日期和/或时间时,转换失败。 根源: mon dd yyyy英文日期格式在中文环境中不算日期格式,只有在英文环境中才算日期格式。 解决方案: 阅读全文
posted @ 2020-09-05 08:03 张工502219048 阅读(1898) 评论(0) 推荐(0) 编辑

2020年6月21日 #

摘要: 脚本: /* 说明:sql server如何通过pivot对数据进行行列转换(进阶),用于员工业绩按月龙虎排行榜、客户销售金额按月排行榜等 脚本来源:https://www.cnblogs.com/zhang502219048/p/13173228.html 作者:zhang502219048 作者 阅读全文
posted @ 2020-06-21 17:59 张工502219048 阅读(620) 评论(0) 推荐(0) 编辑

2020年5月30日 #

摘要: 问题:在项目数据库开发中,有时我们编写的脚本,在本机执行是没有问题的,但部署到服务器的时候,却在脚本运行时报错了。报错的中英文错误提示信息分别如下。中文:无法解决 equal to 运算中 "SQL_Latin1_General_CP1_CI_AS" 和 "Chinese_PRC_CI_AS" 之间 阅读全文
posted @ 2020-05-30 14:47 张工502219048 阅读(990) 评论(0) 推荐(0) 编辑

2020年5月21日 #

摘要: 脚本: /* 说明:sql server如何通过pivot对数据进行行列转换 脚本来源:https://www.cnblogs.com/zhang502219048/p/12933347.html */ create table #t ( [员工工号] nvarchar(50), [员工姓名] nv 阅读全文
posted @ 2020-05-21 20:24 张工502219048 阅读(781) 评论(0) 推荐(0) 编辑

2020年5月20日 #

摘要: 脚本: /* 说明:sql server如何通过排序控制insert into ... select ... 语句的记录插入顺序 脚本来源:https://www.cnblogs.com/zhang502219048/p/12925890.html */ create table #t ( id i 阅读全文
posted @ 2020-05-20 20:37 张工502219048 阅读(2360) 评论(0) 推荐(0) 编辑

2020年5月4日 #

摘要: 问题:生产环境的操作系统和数据库可能是英文版的,而我们的母语是中文,如果英语能力差点,可能有时对英语环境下的数据库脚本报错的英文提示看不懂,如果直接拿英语错误提示通过翻译工具去翻译,也不一定就是完全翻译得100%准确。 解决方案:通过set language指定语种语言,使sql server的报错 阅读全文
posted @ 2020-05-04 15:18 张工502219048 阅读(931) 评论(1) 推荐(1) 编辑

2020年5月3日 #

摘要: 一、问题 问题1 场景:如果你未来的丈母娘要求你,第1天给她1分钱,第2天给2分钱,第3天给4分钱,以此类推,每天给前一天的2倍,给1个月(按30天)算就行。问:第30天给多少钱,总共给多少钱? 问题2 场景:如果有两份工作。 第1份:第1天给你1分钱,第2天给你2分钱,第3天给你4分钱,以此类推, 阅读全文
posted @ 2020-05-03 19:33 张工502219048 阅读(6859) 评论(2) 推荐(1) 编辑

2020年4月19日 #

摘要: 前言: 由于新型冠状病毒影响,博主(zhang502219048)在2020年1月份从广东广州工作地回到广东揭阳产业转移工业园磐东街道(镇里有阳美亚洲玉都、五金之乡,素以“金玉”闻名)老家后,还没过去广州现场复工,年后又延迟复工 + 居家办公,并且在老家对原来房子进行简单装修,1月份到3月份没时间去 阅读全文
posted @ 2020-04-19 10:49 张工502219048 阅读(722) 评论(0) 推荐(0) 编辑

2019年12月27日 #

摘要: 脚本: create procedure #pr_CreateFileGroup @dbname nvarchar(max), @filegroupname nvarchar(max) as begin /* 脚本来源:https://www.cnblogs.com/zhang502219048/p 阅读全文
posted @ 2019-12-27 09:22 张工502219048 阅读(691) 评论(1) 推荐(0) 编辑

2019年11月29日 #

摘要: 重建全库索引: exec sp_msforeachtable 'DBCC DBREINDEX(''?'')' 更新全库统计信息: --更新全部统计信息 exec sp_updatestats 实例反馈: 在实际项目中,出现过导入数据的存储过程执行需要大概46分钟,而通过更新全库统计信息之后,只需要6 阅读全文
posted @ 2019-11-29 09:03 张工502219048 阅读(732) 评论(0) 推荐(0) 编辑

2019年10月31日 #

摘要: 问题:需要对DataGridViewRow的下拉框列Item2所选内容进行判断,看是否跟数据库里面某个配置表的数据列Item1匹配。如果用两个foreach循环进行匹配,会导致逻辑复杂而且容易只break里面那层循环而忽略break外层循环而造成bug. 解决方案:巧妙使用List,把配置表满足条件 阅读全文
posted @ 2019-10-31 08:56 张工502219048 阅读(1842) 评论(0) 推荐(0) 编辑

2019年9月30日 #

摘要: 增加分批删除一个表指定数据的话只需要增加几行代码就可以 阅读全文
posted @ 2019-09-30 22:25 张工502219048 阅读(731) 评论(0) 推荐(0) 编辑

2019年8月27日 #

摘要: 脚本: /* 功能:sql server日期转换为dd-mon-yyyy和dd-MMM-yyyy这样的格式 示例:27-Aug-2019 作者:zhang502219048 脚本来源:https://www.cnblogs.com/zhang502219048/p/11416150.html */ 阅读全文
posted @ 2019-08-27 09:01 张工502219048 阅读(2854) 评论(0) 推荐(0) 编辑

2019年8月7日 #

摘要: 问题: 今天一同事请教博主,他拼接了一个语句,select表格形式数据,然后使用@@rowcount获取到行数。 但他又有这样特别的需求:想只获取行数而不返回表格数据结果,因为是while循环,不想返回那么多次表格到客户端,而且后面又想复用这个返回表格形式数据的脚本字符串,不想在这个脚本字符串上改成 阅读全文
posted @ 2019-08-07 21:02 张工502219048 阅读(1348) 评论(0) 推荐(0) 编辑

2019年7月31日 #

摘要: 一、问题 问题1 场景:如果你未来的丈母娘要求你,第1天给她1分钱,第2天给2分钱,第3天给4分钱,以此类推,每天给前一天的2倍,给1个月(按30天)算就行。问:第30天给多少钱,总共给多少钱? 问题2 场景:如果有两份工作。 第1份:第1天给你1分钱,第2天给你2分钱,第3天给你4分钱,以此类推, 阅读全文
posted @ 2019-07-31 20:25 张工502219048 阅读(3063) 评论(0) 推荐(1) 编辑

2019年7月25日 #

摘要: 问题:博主看到项目脚本,有些地方使用了format函数来把当前日期转换成yyyyMMddHHmmssffff的格式,但在测试环境数据库是sql 2008 r2,是不支持format这个函数的。脚本会报错: 'format' 不是可以识别的 内置函数名称。 'format' is not a reco 阅读全文
posted @ 2019-07-25 09:04 张工502219048 阅读(4913) 评论(0) 推荐(0) 编辑

2019年7月17日 #

摘要: 问题: 在数据库编程开发中,有时需要获取一年前的日期,以便以此为时间的分界点,查询其前后对应的数据量。例如:1. 想查询截止到一年前当天0点之前的数据量,以及一年前当天0点开始到现在的数据量。2. 想查询截止到一年前当天24点之前的数据量,以及一年前当天24点开始到现在的数据量。3. 想查询截止到一 阅读全文
posted @ 2019-07-17 23:14 张工502219048 阅读(2199) 评论(0) 推荐(0) 编辑

2019年7月2日 #

摘要: 问题: 在数据库编程开发中,有时会遇到数据量比较大的情况,如果直接大批量进行添加数据、修改数据、删除数据,就会是比较大的事务,事务日志也比较大,耗时久的话会对正常操作造成一定的阻塞。虽不至于达到删库跑路的程度,但也严重影响了用户体验,老是卡巴死机的感觉。这时我们可以对这个大批量操作进行分小批事务操作 阅读全文
posted @ 2019-07-02 21:46 张工502219048 阅读(1565) 评论(0) 推荐(0) 编辑

2019年6月30日 #

摘要: 问题:在数据库脚本开发中,有时需要生成一堆连续数字或者日期,例如yearly report就需要连续数字做年份,例如daily report就需要生成一定时间范围内的每一天日期。而自带的系统表master..spt_values存在一定的局限性,只是从0到2047(验证脚本:select * fro 阅读全文
posted @ 2019-06-30 11:51 张工502219048 阅读(1263) 评论(0) 推荐(1) 编辑

2019年6月28日 #

摘要: 问题:博主在2011年6月,广东技术师范大学大四的时候,从学校计算机科学学院网站看到招聘信息并到广东中原地产IT部面试,很清楚记得当时的面试题目:怎么从数据库里面查询重复记录。 解决方案:在sql server中,可以用group by和having来解决问题。 脚本: /* 脚本来源:https: 阅读全文
posted @ 2019-06-28 08:58 张工502219048 阅读(1613) 评论(0) 推荐(0) 编辑

2019年6月21日 #

摘要: 问题:有时已有项目要移植,例如原来在广州地区使用的某系统,突然说惠州那边也要用这套一样的系统。或者,在demo环境下弄了一些测试数据。然后要清空全部表数据。如果表比较多的话,逐个表手工编写脚本就太麻烦了。 解决方案:本博主就教教大家怎么仅用一个简单语句快速删除全库各表数据,全部清空数据。使用系统存储 阅读全文
posted @ 2019-06-21 22:09 张工502219048 阅读(1881) 评论(0) 推荐(2) 编辑

摘要: 问题:生产环境的数据库可能比较大,如果直接进行全备而不压缩的话,备份集就会占用了大量磁盘空间。给备份文件的存放管理带来不便。特别是如果要做logshipping,那就需要先在第一台服务器进行完全备份,如果备份集是超过100G,不仅备份时间长,而且把备份集复制到第二台服务器的过程中也会比较耗I/O资源 阅读全文
posted @ 2019-06-21 12:08 张工502219048 阅读(2633) 评论(0) 推荐(0) 编辑

2019年6月15日 #

摘要: 问题:工作过程中,不管是什么项目,伴随着项目不断升级版本,对应的项目数据库业务版本也不断升级,数据库出现新增表、修改表、删除表、新增字段、修改字段、删除字段等变化,如果人工检查,数据库表和字段比较多的话,工作量就非常大。 解决方案:这里博主为大家分享一个在工作过程中编写的自动检查数据库表结构版本差异 阅读全文
posted @ 2019-06-15 20:39 张工502219048 阅读(1996) 评论(6) 推荐(2) 编辑

2019年6月8日 #

摘要: 问题:博主在2010-2011学年,广东技术师范大学大四的时候,去过红海人力集团面试数据库职位,很清楚记得当时有一道笔试题目是:编写sql从表里面随机取出10条记录。 解决方案:在sql server中,有一个随机函数newid(),可以用order by newid()来解决随机排序和随机取出数据 阅读全文
posted @ 2019-06-08 08:45 张工502219048 阅读(2746) 评论(0) 推荐(1) 编辑

2019年6月7日 #

摘要: 问题描述:在工作过程中,有时会遇到这样的问题,写好sql查询语句在数据库中查询数据,看到行数(比如说是1000行),但是把查询结果复制到Excel里面,却发生了行列错位问题,而导致Excel里面的行数是超过1000行的,造成数据行数的不一致。 问题重现:字段值包含char(10)换行符,复制字段值到 阅读全文
posted @ 2019-06-07 21:46 张工502219048 阅读(7316) 评论(1) 推荐(3) 编辑

2019年6月3日 #

摘要: 工作过程中,如果一个数据库的表比较多,手工编写统计脚本就会比较繁琐,于是摸索出自动生成各表统计数据量脚本的通用方法,直接上代码: 以在ReportServer数据库中运行这个脚本为例,运行结果如下图(表名、数据量): 后记:以上是本人在实际工作中遇到的sql server编写通用脚本自动统计各表数据 阅读全文
posted @ 2019-06-03 21:31 张工502219048 阅读(1645) 评论(0) 推荐(0) 编辑

2019年6月1日 #

摘要: 1. 收款码1.1 保存把自己的支付宝和微信二维码收款码(注意是收款码而不是付款码,别搞错)两个图片保存到电脑,并使用图片编辑工具(Windows自带画图软件,或者QQ等其他截图工具都可以)只截取二维码部分即可。 1.2 上传进入个人博客,点“管理”,再点“相册”,添加好相册名称(类似文件夹名称), 阅读全文
posted @ 2019-06-01 10:56 张工502219048 阅读(1960) 评论(7) 推荐(3) 编辑

2019年5月31日 #

摘要: 软件环境:1.本机是sql server 2012,远程服务器是sql server 20162.本机是Windows 7,安装不了sql server 2016 问题场景1:本机sql server 2012 profiler可以对远程sql server 2016进行跟踪,但保存的跟踪文件(.t 阅读全文
posted @ 2019-05-31 21:29 张工502219048 阅读(1139) 评论(0) 推荐(0) 编辑