
SQL调优及高级SQL语法编写
文章平均质量分 63
以SQL Server为例,讲述SQL调优以及SQL中进行Web开发,专栏包含存储过程、函数、触发器、表变量、临时变量、游标、JSON解析、WEBAPI调用,邮件发送、HTML生成,SQL中DLL调用等高级SQL用法。满足用SQL完成应用程序开发。
Favor_Yang
国内某上市公司开发组组长,全栈开发工程师。熟悉各种企业级管理系统方案设计、开发、实施等工作。
展开
-
SQL Server 解决游标性能问题的替代方案
游标虽然功能强大,但在处理大量数据时可能会导致性能问题。通过使用 WHILE 循环、SET 操作、ROW_NUMBER() 和 CTE、MERGE 语句、表变量以及 APPLY 操作符等替代方案,可以提高查询性能和代码的可维护性。选择合适的替代方案取决于具体的应用场景和需求。原创 2024-12-18 14:53:18 · 448 阅读 · 0 评论 -
SQL Server 表值函数使用场景有哪些
表值函数在 SQL Server 中提供了强大的数据处理能力,适用于多种场景。通过将复杂的查询逻辑封装在函数中,可以提高代码的可读性和可维护性,同时简化主查询的编写。根据具体需求选择合适的表值函数类型(内联表值函数或多语句表值函数),可以有效提升数据库性能和开发效率。原创 2024-12-16 16:37:39 · 334 阅读 · 0 评论 -
考勤统计,一张表查询每月的员工考勤数据
近期根据公司人事要求,写了一些关于考勤统计的报表。主要是查询员工每月的考勤数据,要求一行数据显示员工的当月的每天的考勤信息,标的样式如下:然后,根据考勤表,写了如下SQL语句,来实现报表的查询,谨以此做记录,以备后续查阅。SELECT DeptName AS 所属部门, UserName AS 员工姓名...原创 2019-10-18 11:09:13 · 9148 阅读 · 1 评论 -
Oracles数据库通过存储过程调用飞书接口推送群组消息
在Oracle数据库中,可以通过创建存储过程调用飞书接口来推送群组消息。存储过程使用UTL_HTTP包发送HTTP请求,设置请求头和请求体,并处理响应。调用存储过程时,需提供飞书群组机器人的Webhook URL和符合飞书API要求的JSON格式消息内容。确保数据库服务器能访问飞书API,并注意消息长度限制。通过此方法,可实现从Oracle数据库向飞书群组推送消息的功能。原创 2025-05-13 13:42:09 · 246 阅读 · 0 评论 -
MySQL数据库故障排查指南
数据库故障排查是确保数据库稳定运行的关键。首先,检查数据库服务状态和网络连接,确认配置文件的正确性。性能问题可通过分析慢查询日志和优化SQL语句来解决。数据一致性需通过事务、外键约束和定期备份来保障。存储问题需监控磁盘空间并优化表结构。日志分析有助于定位问题根源。安全性方面,应定期更新软件、检查权限和启用SSL加密。备份和恢复策略是数据安全的重要保障。使用监控工具和设置报警规则可及时发现潜在问题。整理常见错误代码和解决方案,建立知识库,有助于快速解决问题。推荐使用MySQL Workbench、pgAdmi原创 2025-05-13 13:38:38 · 34 阅读 · 0 评论 -
SQL Server Import of Microsoft Distributed Transaction Coordinator (MS DTC) transaction failed 解决方案
(MS DTC) transaction failed”错误通常是由于分布式事务管理相关的问题。以下是一些详细的步骤和解决方案,帮助诊断和解决这个问题。原创 2025-01-14 13:06:20 · 149 阅读 · 0 评论 -
SQLServer触发器并发死锁问题分析及解决方案
在SQL Server中,触发器(Triggers)是一种特殊的存储过程,当特定的事件(如 INSERT、UPDATE、DELETE)发生时自动执行。然而,触发器在并发环境下可能会遇到一些问题,特别是与性能和数据一致性相关的问题。以下是一些常见的并发问题及其解决方法。原创 2025-01-14 11:31:07 · 139 阅读 · 0 评论 -
MySQL数据库多主模式解决方案
虽然 MySQL 本身不直接支持多主模式,但通过 Galera Cluster、MySQL Group Replication、第三方工具和 MySQL Router 等解决方案,可以实现类似的功能。MySQL 本身并不直接支持多主模式(Multi-Master Replication),即多个主节点可以同时进行写操作,并且这些更改会自动同步到其他主节点。• 自动故障转移:在主节点故障时,自动选择新的主节点。• 自动故障转移:在主节点故障时,自动选择新的主节点。原创 2024-12-23 14:41:10 · 248 阅读 · 0 评论 -
SQL Server数据库多主模式解决方案
虽然 SQL Server 本身不直接支持多主模式,但通过 Always On 可用性组、分布式事务、合并复制、第三方工具和消息队列等方法,可以实现类似的功能。根据具体需求和应用场景,选择合适的解决方案。如果需要真正的多主模式,可能需要考虑使用第三方工具或平台。原创 2024-12-23 14:20:35 · 454 阅读 · 0 评论 -
SQL Server 批量插入数据的方式汇总及优缺点分析
方法特点适用场景简单易用少量数据插入高效,适用于从文件中导入大量数据大型数据集导入OPENROWSET灵活,支持多种数据源灵活,支持多种数据源BCP 命令行工具快速,易于自动化自动化任务SqlBulkCopy 类在应用程序中高效执行批量插入应用程序集成简单高效,适合数据迁移数据迁移MERGE 语句灵活性高,适用于复杂的数据操作复杂的数据操作直接利用存储过程的结果存储过程结果插入。原创 2024-12-19 11:50:25 · 614 阅读 · 0 评论 -
C# 6.0 连接elasticsearch数据库
NEST 提供了丰富的 API 来执行各种操作,如创建索引、索引文档、搜索文档、更新文档和删除文档。在 C# 6.0 中连接 Elasticsearch 数据库,您可以使用官方的 Elasticsearch 客户端库 NEST。接下来,您需要配置 Elasticsearch 客户端以连接到您的 Elasticsearch 实例。您可以使用 NEST 将文档索引到 Elasticsearch 中。如果您还没有创建索引,可以使用 NEST 创建一个新的索引。您可以使用 NEST 更新已有的文档。原创 2024-12-17 13:41:13 · 357 阅读 · 0 评论 -
MSSQL AlwaysOn 可用性组(Availability Group)中的所有副本均不健康排查步骤和解决方法
通过检查副本状态、服务状态、网络连接、防火墙设置、日志文件、磁盘空间、数据库镜像端点、可用性组配置以及尝试恢复和重新配置副本,可以逐步定位并解决问题。当遇到 MSSQL AlwaysOn 可用性组(Availability Group)中的所有副本均不健康的情况时(MSSQL AG '副本名称': All replicas unhealthy),这通常意味着可用性组无法正常工作,数据同步和故障转移功能可能受到影响。确保所有参与可用性组的节点上的 SQL Server 服务和 Windows 服务正在运行。原创 2024-12-17 13:25:49 · 381 阅读 · 0 评论 -
SQL Server 表值函数使用示例
表值函数有两种类型:内联表值函数(Inline Table-Valued Function)和多语句表值函数(Multi-Statement Table-Valued Function)。通过上述示例,你可以了解如何在 SQL Server 中创建和使用内联表值函数和多语句表值函数。内联表值函数使用单个 RETURN 语句返回一个表。1. 性能:内联表值函数通常比多语句表值函数性能更好,因为它们被优化为单个查询计划。3. 调试:调试多语句表值函数可能比内联表值函数更复杂,因为它们包含多个语句。原创 2024-12-17 11:02:31 · 426 阅读 · 0 评论 -
数据库优化时如何查看SQL语句有没有使用索引
要确定查询是否使用了索引,可以通过查看查询的执行计划来判断。大多数数据库管理系统(如MySQL、PostgreSQL、SQL Server等)都提供了工具来生成和查看查询的执行计划。原创 2024-12-16 16:12:23 · 412 阅读 · 0 评论 -
SQL Server 预警Number of index and table scans exceeds index searches in the last 15m
当发现“Number of index and table scans exceeds index searches”时,应仔细分析查询的执行计划,检查索引的使用情况,并根据具体情况采取相应的优化措施。通过创建合适的索引、优化查询条件、更新统计信息和重建索引等方法,可以显著提高数据库的性能。原创 2024-12-16 15:54:18 · 75 阅读 · 0 评论 -
考勤查询统计SQL脚本。
本文主要记录下平时工作中考勤统计中的SQL脚本,用于查询公司当月员工的考勤信息,包含请假,加班,打开等多维度的考勤数据,最终汇合成一张完整的考勤统计报表。分享给大家参考。原创 2018-11-27 08:43:06 · 10690 阅读 · 6 评论 -
年休假扣减顺序存储过程
最近在优化公司的年休假扣减流程,这里写了两种方式,一种是在数据库中使用存储过程,进行年休假顺序扣减。也就是本文的介绍的一种情况,还有一种是在代码中通过积分扣减形式,进行扣减计算。这个将在下一篇文章中介绍。1.年休假统计表的表结构SQL如下,在数据库中执行即可。/****** Object: Table [dbo].[ZZ_HR_ANNUAL_VACATION] Script Date: 2020/5/18 13:55:37 ******/SET ANSI_NULLS ONGOS.原创 2020-05-18 14:01:37 · 622 阅读 · 0 评论 -
SQL Server 实现邮件发送功能(配置步骤及存储过程源码)
本文主要讲解了通过SQL Server实现邮件发送的配置方式以及源代码参考。属于SQL Server开发的高级范畴。实现了通过SQL发送邮件内容以及附件。并且邮件内容以html格式进行发送。附件采用SQL自带函数进行生成,然后通过调用存储过程,可以实现邮件的定时定期发送。欢迎大家学习交流。原创 2023-04-01 15:10:46 · 2749 阅读 · 0 评论 -
SQL Server通过存储过程实现自定义邮件格式并定时发送
SQL Server能够通过SQL语句实现邮件发送HTML页面并推送给指定用户。本文主要分享一个案例,工厂间通过SQL存储过程自定义邮件格式,并发送给工厂中的指定员工。原创 2024-12-16 15:35:44 · 487 阅读 · 0 评论 -
SQL Server 解析JSON复杂的多层级示例
我们的目的呢,就是把JSON串解析出来,并分别保存到生产订单的表里面,这里我们定义为是哪个临时表,分别为#MO-生产订单主表,#MOItem-生产订单明细表,#MOItemProcess--生产订单工序表,然后通过解析JSON串,来把这个数据分别存到三张临时表里面。好,下面我们贴上解析的SQL语句,然后看看解析的效果。首先,构造一个JSON串,JSON串Head,Body,Body包含两个ITEM,分别是生产订单对应的工序明细行和产品明细行,如下所示。原创 2022-07-29 23:01:11 · 1684 阅读 · 0 评论 -
SQLServer 分页分页查询优化方案,1秒内查询20万条数据的表
最近在做sql分页查询的话,发现数据表中的数据量非常大的话,使用count(*)去统计行数的话,还是非常慢的。20多万条数据的表,用count查询,大概在9秒左右。上图可以看到,同样的SQL语句,上面的就是1秒内查询出来的,是不是快了很多。下面也贴出来执行计划,有兴趣的小伙伴可以自己研究下了。服务器是4核8G内存的。上面这种写法,性能瞬间就提上来了,1秒内就查询了出来。原创 2020-11-25 21:10:05 · 3146 阅读 · 0 评论 -
SQLServer获取2020年节假日列表(可用于Java、.NET,Python,C++等实现)
上次写了关于SQLServer获取2019年节假日列表的一个博客,这次根据上次的资源进行更新。参考博文如下:SQL Server 获取2019年节假日列表(可用于Java、.Net系统实现)同样是创建日期表:CREATE TABLE [dbo].[HR_WorkDayList]( [WorkDate] [varchar](10) NOT NULL, [DateType] [nva...原创 2019-11-22 22:53:06 · 1341 阅读 · 1 评论 -
无法为数据库中的对象分配空间,因为‘PRIMARY‘文件组已满问题处理方式
今天公司同事反馈,在手机APP端进行业务操作时,提示无法为数据库中的对象分配空间,因为'PRIMARY'文件组已满,如下所示。出现这个问题的原因是数据库中设置了Log日志限制了文件增长。设置如下所示,然后修改了相关设置,解决该问题。1、硬盘设置格式为FAT32 ,此时可以备份,然后修改为NTFS格式(风险较高的一种方式)2、就是上述所说的属性设置为限制增长,这样数据库到指定的大小之后,就会显示这种问题。3、还有就是磁盘空间的问题了。原创 2019-11-19 09:02:23 · 18319 阅读 · 1 评论 -
SQL语句-考勤统计表按照年份统计员工每月的加班调休数据
加班和请假流程分别是不同的表,员工信息表由于取员工钉钉上的信息和系统内部信息结合,因此,进行关联查询,同时上年度结余信息,单独建立一张表维护,加起来总共五张表。这五张表通过UserID字段进行关联。其中,和钉钉考勤数据关联按照考勤ID去关联。最近在做考勤统计相关的报表,人事要求统计出每位员工每年的的调休和加班统计表。加班分为平时加班和周末加班,节假日加班由于算作工资,因此不统计。平时加班包含上年结余的和本年度的加班相加。然后,在计算出本年度的结余。表结构就不分享出来了,SQL语句可以做参考。原创 2019-10-22 22:14:28 · 2587 阅读 · 0 评论 -
SQL Server执行计划详解
在博客园上看到一篇很不错的讲解SQL执行计划的文章,引用过来以供学习。访问地址:https://www.cnblogs.com/knowledgesea/p/5005163.html下面是关于SQLServer的索引的原理的相关博客,也收藏下。https://www.cnblogs.com/knowledgesea/p/3672099.html同时供大家参考学习。...原创 2019-07-10 13:45:38 · 1926 阅读 · 0 评论 -
Linq两个DateTable Left Join 多条件联合主键关联查询
Linq查询时,关于两个DateTable的关联查询,涉及到多个主键时,我们一般采用On New把字段一一关联。但是DateTable的字段可能不会一样,因此我们可以采用别名的方式,使其一一对应。具体方式如下: new { Name = m.Field<string>("UName"), Date = m.Field<string>("WorkDate") } equa...原创 2018-12-17 15:21:32 · 2648 阅读 · 4 评论 -
SQL Server 获取2025年节假日列表(可用于Java、.Net实现)
采用Excel表格,组合成SQL脚本,然后更新表数据。下表是我整理的2019年的节假日信息,大家根据网上国家发布的,修改为2025年的即可。UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='国庆节'WHERE WorkDate='2019-10-04'UPDATE [dbo].[HR_WorkDayList] SET [IsWorkDay] =0 ,[Remark] ='国庆节'WHERE WorkDate='2019-10-06'原创 2018-12-10 13:32:26 · 4556 阅读 · 1 评论 -
SQL server Merge into MERGE 语句试图多次更新或删除同一行。目标行与多个源行匹配时会出现这种情况。MERGE 语句无法多次更新/删除目标表的同一行。请简化 ON 子句,
SQLserver Merge into 的用法 在匹配Using 源表时,有时候会报异常消息 8672,级别 16,状态 1,第 1 行 MERGE 语句试图多次更新或删除同一行。目标行与多个源行匹配时会出现这种情况。MERGE 语句无法多次更新/删除目标表的同一行。请简化 ON 子句,针对这问题的解决办法一般是确保源表的on字段是唯一的。因为我们可以用distinct关键字,保证源表的On 字段的唯一性。原创 2018-12-10 10:18:20 · 6256 阅读 · 0 评论 -
SQL语句删除具有外键约束(foreign key)的表。因为该对象正由一个 FOREIGN KEY 约束引用。
关于包含外键的表,清理数据的时候,如truncateTable,网上大部分的解决办法是,删除外键-》删除数据-》再新建表。这里介绍一种不需要删除外键,只需要修改外键属性就可以删除数据的方式。如上图所示,展开表名,找到外键,双击外键,修改Insert和Update规范下面的删除规则为“级联”,然后保存表,就可以删除数据了。当然,为了保证表还是原先的样子,删除之后也可以把删除规则再修改...原创 2018-12-05 14:19:48 · 7379 阅读 · 0 评论