当前位置: 首页 > wzjs >正文

深圳网站制作 论坛国内新闻摘抄2022年

深圳网站制作 论坛,国内新闻摘抄2022年,房地产网站建设解决方案,网站主页面设计多少钱在SQL Server 再进阶:类型多样性分析与时间维度扩展》基础上,我们跳出传统聚合框架,探索 SQL Server 特有的高级语法特性,包括动态透视PIVOT、数据清洗正则函数、T-SQL 存储过程优化,以及基于执行计划的查询调优。这些…

在SQL Server 再进阶:类型多样性分析与时间维度扩展》基础上,我们跳出传统聚合框架,探索 SQL Server 特有的高级语法特性,包括动态透视PIVOT、数据清洗正则函数、T-SQL 存储过程优化,以及基于执行计划的查询调优。这些技术可解决动态列生成、不规则数据清洗、批量自动化处理等复杂场景,实现从数据处理到架构设计的升级。

一、动态透视 PIVOT:多维数据动态展示

业务场景:生成各部门全年度各季度请假类型报表

传统CASE WHEN需硬编码季度列,而 SQL Server 的PIVOT操作支持动态列生成,尤其适合规则性维度(如季度、月份)的透视分析。

1. 基础语法与核心逻辑

SELECT ...FROM (数据源)PIVOT (聚合函数(度量列) FOR 透视列 IN (动态列名)) AS 别名
  • 核心优势:自动根据透视列值生成动态列,避免手动编写大量CASE WHEN
  • 适用场景:维度值未知或频繁变化时(如新增请假类型、统计周期扩展)
2. 实战案例:按季度 / 类型动态透视表

WITH leave_quarter AS (SELECTd.dept_name,DATEPART(QUARTER, tl.apply_time) AS qtr, -- 提取季度(1-4)tl.leave_type,SUM(tl.leave_days) AS total_daysFROM t_dept dJOIN t_leave tl ON d.dept_id = tl.dept_idGROUP BY d.dept_name, DATEPART(QUARTER, tl.apply_time), tl.leave_type)-- 动态生成Q1-Q4列,每个类型对应季度天数SELECTdept_name AS 部门,[年假] AS 年假天数,[事假] AS 事假天数,[病假] AS 病假天数,[调休] AS 调休天数FROM leave_quarterPIVOT (MAX(total_days) FOR leave_type IN ([年假], [事假], [病假], [调休])) AS pvtORDER BY 部门;
3. 动态列优化:通过动态 SQL 生成未知类型列

DECLARE @cols NVARCHAR(MAX), @sql NVARCHAR(MAX);-- 获取所有唯一请假类型SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(leave_type)FROM t_leave FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '');SET @sql = 'SELECTdept_name AS 部门,' + @cols + 'FROM (SELECTd.dept_name,tl.leave_type,SUM(tl.leave_days) AS total_daysFROM t_dept dJOIN t_leave tl ON d.dept_id = tl.dept_idGROUP BY d.dept_name, tl.leave_type) srcPIVOT (MAX(total_days) FOR leave_type IN (' + @cols + ')) pvt';EXEC sp_executesql @sql;

二、数据清洗:正则表达式与模式匹配

业务场景:规范请假类型命名(处理 "年休假"" 带薪年假 " 等不规则输入)

SQL Server 通过PATINDEX、SUBSTRING、REPLACE等函数实现模式匹配驱动的数据清洗。

1. 基础函数速查表

函数

功能描述

示例(清洗请假类型)

PATINDEX

返回模式匹配的起始位置

查找类型中是否包含 "年假":PATINDEX('%年假%', leave_type)

REPLACE

按模式替换字符串

将 "年休假"" 带薪年假 "统一为" 年假 ":REPLACE(leave_type, '带薪年假', '年假')

SUBSTRING

提取子字符串

从 "2025-06 - 事假 - 张三" 中提取类型:SUBSTRING(leave_type, CHARINDEX('-', leave_type)+1, 2)

2. 实战:批量标准化请假类型

-- 创建临时表存储不规范数据SELECT * INTO t_leave_raw FROM t_leave;-- 插入不规则数据INSERT INTO t_leave_raw (leave_type) VALUES ('年休假'), ('带薪年假'), ('事 假'), ('病假-普通');-- 正则清洗:统一类型命名UPDATE t_leave_rawSET leave_type =CASEWHEN PATINDEX('%年假%', leave_type) > 0 THEN '年假'WHEN PATINDEX('%事假%', leave_type) > 0 THEN '事假'WHEN PATINDEX('%病假%', leave_type) > 0 THEN '病假'ELSE '其他'END;-- 验证清洗结果SELECT leave_type,CASE WHEN leave_type IN ('年假', '事假', '病假', '其他') THEN '有效' ELSE '无效' END AS is_validFROM t_leave_raw;
3. 进阶应用:提取请假天数中的数值

-- 从"3天半""5.5天"中提取数字(支持小数)SELECTleave_type,TRY_CAST(SUBSTRING(leave_days_desc, 1, PATINDEX('%[^\d.]%', leave_days_desc + 'a')-1) AS DECIMAL(5,1))AS extracted_daysFROM t_leave_text;

三、T-SQL 存储过程:封装复杂递归逻辑与批量处理

业务场景:定期生成部门考勤统计报表(含递归汇总 + 邮件通知)

通过存储过程将递归逻辑、数据计算、流程控制封装为一体,实现自动化批量处理。

1. 存储过程框架(递归汇总部门请假数据)

CREATE OR ALTER PROCEDURE sp_calculate_dept_leave@dept_id INT,@total_days DECIMAL(5,1) OUTPUT -- 输出参数:部门总请假天数(含下级)ASBEGINSET NOCOUNT ON;DECLARE @child_dept_id INT, @child_total DECIMAL(5,1);-- 计算当前部门数据SELECT @total_days = ISNULL(SUM(leave_days), 0)FROM t_leaveWHERE dept_id = @dept_id;-- 递归处理下级部门DECLARE child_cursor CURSOR FORSELECT dept_id FROM t_dept WHERE parent_dept_id = @dept_id;OPEN child_cursor;FETCH NEXT FROM child_cursor INTO @child_dept_id;WHILE @@FETCH_STATUS = 0BEGINEXEC sp_calculate_dept_leave @dept_id = @child_dept_id, @total_days = @child_total OUTPUT;SET @total_days = @total_days + @child_total;FETCH NEXT FROM child_cursor INTO @child_dept_id;END;CLOSE child_cursor;DEALLOCATE child_cursor;END;-- 调用示例:计算集团总部(dept_id=1)总请假天数DECLARE @total DECIMAL(5,1);EXEC sp_calculate_dept_leave @dept_id = 1, @total_days = @total OUTPUT;PRINT '集团总部总请假天数:' + CAST(@total AS VARCHAR);
2. 性能优化点
  • 避免游标循环:改用递归 CTE 替代游标递归(见第二课实现),减少存储过程调用开销
  • 批量处理:使用INSERT ... EXEC批量插入统计结果
  • 事务控制:添加TRY/CATCH块处理异常,保证数据一致性

BEGIN TRYBEGIN TRANSACTION;-- 批量操作逻辑COMMIT TRANSACTION;END TRYBEGIN CATCHROLLBACK TRANSACTION;THROW; -- 抛出异常END CATCH

四、执行计划分析:诊断与优化复杂查询

业务场景:优化含递归 CTE 和 PIVOT 的慢查询

通过 SQL Server 的图形化执行计划和动态管理视图(DMV)定位性能瓶颈。

1. 生成执行计划

-- 方法1:SSMS中通过Ctrl+L生成图形化计划-- 方法2:使用DMV获取文本计划SET SHOWPLAN_TEXT ON;GO-- 目标查询语句GOSET SHOWPLAN_TEXT OFF;
2. 关键指标解读

操作类型

性能影响

优化建议

Nested Loops

高成本(尤其大数据集)

改用Hash Join或Merge Join(添加索引后生效)

Key Lookup

书签查找导致二次查询

为查询字段添加覆盖索引

Recursive Common Table Expression

递归深度过深

添加OPTION (MAXRECURSION n)限制,或优化层级设计

3. 实战优化:为关联字段添加覆盖索引

-- 优化前:大量Key Lookup导致性能低下CREATE NONCLUSTERED INDEX idx_leave_coverON t_leave(dept_id)INCLUDE (leave_type, leave_days, leave_status, apply_time); -- 添加常用查询字段-- 优化后:执行计划中Key Lookup消失,查询效率提升60%

五、与 Oracle 的技术对比

特性

Oracle(MODEL/PL/SQL)

SQL Server(PIVOT/T-SQL)

动态透视

MODEL 子句

PIVOT + 动态 SQL

递归实现

CONNECT BY

递归 CTE + 存储过程

正则支持

REGEXP 系列函数

PATINDEX+REPLACE

存储过程

PL/SQL

T-SQL(支持游标 / 事务)

六、最佳实践:构建企业级数据处理框架

1. 分层架构设计

2. 索引优化策略

-- 层级关联索引CREATE INDEX idx_dept_parent ON t_dept(parent_dept_id);-- 时间维度索引CREATE INDEX idx_leave_apply_time ON t_leave(apply_time);-- 覆盖索引优化查询CREATE NONCLUSTERED INDEX idx_dept_cover ON t_dept(dept_id) INCLUDE (dept_name);

3. 兼容性与扩展性

  • 跨数据库兼容:避免使用数据库特有的高级语法(如 Oracle MODEL、SQL Server PIVOT),改用通用CASE WHEN实现
  • 动态扩展:通过参数化存储过程和动态 SQL,支持新增统计维度(如新增 "婚假"" 产假 " 类型)

七、总结:从语法应用到架构设计的升华

本次探索的 SQL Server 进阶语法不仅是单个函数的升级,更是数据处理思维的转型

        1、动态透视 PIVOT让多维分析摆脱静态 SQL 限制,适应业务维度的动态变化

        2、T-SQL 存储过程将复杂逻辑封装为可复用组件,提升自动化处理能力

        3、执行计划分析实现从 “代码编写” 到 “性能调优” 的全链路把控

这些技术尤其适合数据密集型企业应用(如人力资源管理、供应链分析),能显著减少 ETL 流程中的代码量,提升复杂统计的开发效率。掌握 SQL Server 进阶语法的核心,在于理解其 “以集合操作为核心” 的设计哲学,通过合理组合递归 CTE、动态透视、存储过程等特性,构建高效可维护的数据解决方案。

http://www.dtcms.com/wzjs/22600.html

相关文章:

  • 哪个网站可以做体育主播虎门今日头条新闻
  • 怎么做手机网站百度云网盘登录入口
  • 邢台网站建设平台百度快速排名软件
  • 字画价格网站建设方案怎么去优化关键词
  • 南阳哪里做网站比较好百度识图在线识别
  • 网站怎么做qq授权登录aso优化榜单
  • wordpress tax input网络推广优化平台
  • 鞍山信息网便民信息百度爱采购优化排名软件
  • 做简历的网站都有哪些内容网络营销的基本方法
  • 做网站后期维护做一个公司网站需要多少钱
  • 网站建设要什么知识南昌seo优化公司
  • 校园网站建设标书文娱热搜榜
  • 政府网站建设工作总结6seo长尾快速排名
  • 一般纳税人企业所得税怎么征收福清seo
  • 做外贸什么网站百度问答平台
  • 网站用的什么数据库手机制作网站的软件
  • 自己做视频网站会不会追究版权长春网站建设团队
  • 网站内容建设和管理百度竞价广告收费标准
  • 台州企业网站搭建厂家torrentkitty磁力天堂
  • 平度168网站建设深圳seo优化培训
  • 028网站建设工作室网站运营维护的基本工作
  • 个人网站取什么域名好网上竞价
  • 洛阳网站建设内容西藏自治区seo 标题 关键词优化
  • 做彩票网站郑州seo团队
  • 网站友情链接怎么添加商城网站建设
  • 广州网站建设定制百度app安卓版下载
  • 网络推广 公司 200个网站总排行榜总点击榜总收藏榜
  • 万网网站备案怎么分析一个网站seo
  • 网站建设怎样设置动态背景免费的客户资源怎么找
  • 做企业网站怎么收费的华与华营销策划公司