SQL Server 2012大幅增强了T-SQL

原文出处http://tech.it168.com/a2012/0323/1328/000001328871.shtml
2012年03月26日00:05 来源:InfoQ 作者:曹如进译 编辑:王玉圆 评论:--条
【IT168 评论】SQL Server 2012对T-SQL进行了大幅增强,其中包括支持ANSI FIRST_VALUE和LAST_VALUE函数,支持使用FETCH与OFFSET进行声明式数据分页,以及支持.NET中的解析与格式化函数。
  Fetch与Offset
  目前,对于实现服务端分页,SQL Server开发人员倾向于选择使用命令式技术,如将结果集加载入临时表,对行进行编号,然后从中挑选感兴趣的范围。有一些开发人员选择使用更加时髦的ROW_NUMBER和OVER模式。另外,还有一些开发人员坚持使用游标。虽然这些技术都不是太难,但是它们可能会较为耗时并且容易出错。不仅如此,由于每个开发人员都有自己中意的实现方式,从而造成这些技术并不一致。
  SQL Server 2012通过增加声明式数据分页解决了该问题。开发人员可以通过在T-SQL的ORDER BY子句后加上OFFSET和FETCH NEXT选项来完成数据分页。目前SQL Server并没有为其做性能优化,而只是帮助完成用户需要手工完成的工作。正如Greg Low博士在演示中所说,只有当用户知道你试图解决的问题是什么,而不是知道你怎样去解决问题的时候,他们才可以更好地编写出查询优化来对性能进行改善。
  Over子句窗口
  有时候开发人员需要基于行之间的差异来编写查询。例如,你可能有兴趣想知道处理当前行与上一行之间所花去的时间。使用游标很容易解决该问题,但由于其风格和性能原因,大家并不怎么使用。你还可以使用子查询进行逐行执行,但这样的代价实在太过昂贵。最后,你还可以将问题推给客户端,但这需要客户端是一门编程语言而不只是一个报表工具方能起效。
  现在你可以使用LAG函数直接访问上一行。由于用户显式声明了试图完成的工作,因此查询分析器会在内存中保留上一行,而不再需要创建一个子查询,这反过来也极大地提升了性能。虽然LAG默认为上一行,但是如果你需要进一步回溯,可以在其中指定偏移量。
  LAG与它的姊妹函数LEAD均为ANSI标准的一部分。该特性自从微软在SQL Server 2005中部分实现OVER子句时,就一直被开发人员要求加入。
  这一版本还支持了FIRST_VALUE和LAST_VALUE。
  反射
  先前开发人员若想要确定查询或存储过程的返回结果类型,需要使用SET FMTONLY命令。使用该命令可以在不需要实际执行查询的情况下预览返回结果的列信息。可惜的是,返回的信息仅仅局限于列的定义,而如果只要先前执行查询便能够获得这些信息。
  通过使用新的sp_describe_first_result_set存储过程,开发人员可以获得查询和存储过程返回结果的详细信息。这些信息包括数据类型及其规模、源表/列,列是否可被更新或由计算而得,以及其他大量信息。动态管理视图sys.dm_exec_describe_first_result和sys.dm_exec_describe_first_result_set_for_object同样具有该特性。
  防御式编程(Defensive Coding)
  开发人员在调用同事编写的存储过程时通常很头疼,这是因为存储过程返回结果在编译期没有保证,因此意外的破坏性改动成了一大顾虑。尽管T-SQL没有提供任何手段来预防这些错误,但是可以借助RESULT SETS选项将错误发生率降至最低。
  开发人员可以通过指定RESULT SETS选项要求存储过程返回特定的数据结构。如果存储过程返回的结果集与被要求的有出入,将会发生错误并导致批次中止。由于发生的错误是运行时错误,因此我们建议使用该选项的开发人员创建完整系列的单元测试,以确保代码在接触生成环境前可以触发该错误。
  错误处理
  T-SQL从2005年就开始支持TRY-CATCH ,但奇怪的是,直到现在才有了THROW。THROW不带参数,它的用法与C#和VB中catch块中的throw类似。也就是说,它会重新抛出异常,而不会丢失当时捕捉到的任何信息。它对于向重试队列记录或添加条目很有帮助,同时也可以通知应用程序出错。
  当THROW带参使用时,它类似于RAISERROR,不同之处在于它支持sys.messages之外的错误信息号(error number),并且它的严重级别(severity)总是16。还有一点与RAISEERROR不同的是,所有未被捕获的THROW错误总是批量终止。
  解析和转换
  T-SQL目前支持PARSE函数,该函数包含选项用于指定区域性设置(Culture)。区域性设置是.NET框架支持的诸多特性之一,用于表明解析如何实现,TRY_PARSE函数也包含该选项。
  类似的,还有一个新的TRY_CONVERT函数。这两者以及tryparse函数在转换失败后会返回null。
  另一方面,FORMAT函数采用了.NET格式化设置。尽管与本地函数(如STR)相比它的速度稍慢,但是却更加灵活。
  日期/时间函数
  虽然T-SQL仍然远没达到完美,但至少日期/事件函数处理上有了些许改善。EOMONTH函数用于返回月份的最后一天,这对报表是一个非常有用的特性。xxxFROMPARTS系列函数使用一系列参数而不是单个字符串来构造日期和时间。它包含了对数据类型Date、DateTime、DateTime2、DateTimeOffset、SmallDate以及Time的支持。
  混合函数(Misc. Function)
  T-SQL包含了Access和Visual Basic中Choose的函数。在某些情况下,它可以被当成一个简化版的CASE使用。另外一个从这些语言中借鉴的函数是IIF。
  CONCAT可用于字符串拼接。它除了可以让代码更容易地移植到其他数据库语言中,还提供了与+运算符不一样的null处理方式。ItzikBen-Gan写道:
  > 连接运算符+在输入为NULL时会产生结果NULL。而CONCAT函数在转换前将NULL输入转换为空字符串。 当然,你可以使用COLAESCE函数替换NULL输入为空字符来完成同样的工作,不过这样做代码会让代码显得混乱。


已标记关键词 清除标记
CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 SQL Server 2008管理员必备指南 基本信息 原书名: Microsoft SQL Server 2008 Administrator's Pocket Consultant 原出版社: Microsoft Press 作者: (美)William R. Stanek    [作译者介绍] 译者: 贾洪峰 丛书名: 微软技术丛书 出版社:清华大学出版社 ISBN:9787302192671 上架时间:2009-2-26 出版日期:2009 年2月 开本:16开 页码:583 版次:1-1 编辑推荐    SQL Server专家的呕心力作,数据库管理员的实践宝典.    全面、深入地剖析SQL Server 2008新特性..    结构独特,实例丰富,操作性强... 内容简介    全书按照由浅入深的逻辑共分为4部分,即管理基础、系统管理、数据管理以及优化与维护。这种分类方法不仅从理论上环环相扣,全面介绍数据库管理人员需要掌握的相关理论知识和工作技能,也从不同层次上体现了数据库管理员的工作内容及工作的要点和难点,能够科学地指导数据库管理员的日常工作。.    本书的特点是按照日常工作的逻辑来编排内容,并含有大量实例操作指导、技巧提示及t-sql代码,方便管理员日常的工作。..    本书适合所有sql server用户参考,更是数据库管理员的必备指南。... 作译者   William R.Stanek,微软MVP(最有价值专家),拥有20多年系统管理和高级编程的经验。他是屡获嘉奖的作家,著作多达70部,其中包括Microsoft Windows Server 2008 Inside Out。他也是“管理员必备指南“系列丛书的编辑。 目录 封面 -19 封底 584 扉页 -18 版权 -17 《微软技术丛书》出版前言 -16 译者序 -14 前言 -13 目录 -9 第Ⅰ部分 SQL Server 2008管理基础 1 第1章 SQL Server 2008管理概况 3 1.1 SQL Server 2008与硬件 4 1.2 SQL Server 2008的版本 6 1.3 SQL Server和Windows 8 1.3.1 SQL Server的服务 8 1.3.2 SQL Server登录和身份验证 9 1.3.3 SQL Server的服务帐户 10 1.4 使用图形化管理工具 11 1.5 使用命令行工具 14 1.5.1 BCP 15 1.5.2 SQLCMD 15 1.5.3 其他命令行工具 17 1.6 使用SQL Server PowerShell 18 1.6.1 运行和使用cmdlet 18 1.6.2 运行和使用SQL Server PowerShell 19 1.6.3 使用SQL Server cmdlet 20 第2章 部署SQL Server 2008 22 2.1 SQL Server集成角色 22 2.1.1 使用SQL Server集成服务 22 2.1.2 使用SQL Server 2008的关系数据仓库 23 2.1.3 使用SQL Server 2008的多维数据库和数据挖掘 25 2.1.4 使用SQL Server 2008管理报表 26 2.2 规划SQL Server 2008的部署 27 2.2.1 建立服务器的性能系统 27 2.2.2 配置I/O子系统 28 2.2.3 确保可用性和可伸缩性 30 2.2.4 确保连接性和数据访问 31 2.2.5 管理SQL Server配置和安全性 32 2.3 运行安装程序和修改SQL Server安装 33 2.3.1 创建新的SQL Server实例 33 2.3.2 添加组件和实例 44 2.3.3 修复SQL Server 2008安装 44 2.3.4 升级SQL Server 2008版本 45 2.3.5 卸载SQL Server 45 第3章 管理外围安全、访问 以及网络配置 46 3.1 管理SQL Server的组件功能 46 3.2 配置SQL Server服务 49 3.2.1 管理服务配置 50 3.2.2 管理服务的状态和启动模式 53
相关推荐
CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 SQL Server 2008实战(SQL Server程序员和DBA不可或缺的权威参考手册) 基本信息 原书名: SQL Server 2008 Transact-SQL Recipes: A Problem-Solution Approach 原出版社: Apress 作者: (美)Joseph Sack 译者: 金迎春 丛书名: 图灵程序设计丛书 数据库 出版社:人民邮电出版社 ISBN:9787115221063 上架时间:2010-3-5 出版日期:2010 年2月 开本:16开 页码:713 版次:1-1 编辑推荐    SQL Server程序员和DBA不可或缺的权威参考手册    查询方便,迅速解决工作中的难题    大量来自微软内部的技巧 内容简介    t-sql一直以来都是 sql server编程的基础。和传统的 t-sql书籍不同,本书以独特的 “技巧 ”形式来介绍知识点,涵盖了数据处理(增删改、视图、索引、存储过程、触发器等)、数据应用(web服务、 clr集成、分布式查询等)和数据库配置(主体、安全、数据库镜像和快照、备份等)3个方面的内容。其中每一个技巧中都包含了有代表性的示例和精炼的解析。    本书实用、高效、技巧性强,适用于 sql server专业技术人员,也可供初学者学习参考。 作译者   Joseph Sack 世界知名的SQL Server技术专家,微软认证数据库管理员(MCDBA),有10多年的SQL Server开发和管理工作经验。目前就职于微软公司高级现场工程组(Premier Field Engineering team)。除本书外,他撰写的SQL Server 2000 Fast Answers for DBAs and Developers(即本书前身)是Amazon五星著作,与人合写的Pro SQL Server 2005也广受好评。他的博客地址是http://joesack.com/WordPress/。 目录 封面 -19 封底 -18 扉页 -17 版权 -16 版权声明 -15 译者序 -14 前言 -12 致谢 -11 目录 -10 第1章 SELECT 1 1.1 基本的SELECT语句 1 1.1.1 从表中选择指定列 2 1.1.2 从所有行中选择所有列 2 1.2 使用基本WHERE子句进行有选择的查询 3 1.2.1 使用WHERE子句指定结果集中返回的行 3 1.2.2 组合搜索条件 4 1.2.3 否定搜索条件 5 1.2.4 保持WHERE子句无歧义 5 1.3 使用运算符和表达式 6 1.3.1 在日期范围搜索中使用BETWEEN 7 1.3.2 使用比较运算符 8 1.3.3 检测NULL值 9 1.3.4 基于一组值返回行 9 1.3.5 LIKE和通配符结合使用 9 1.3.6 声明变量及为变量赋值 11 1.4 数据分组 12 1.4.1 使用GROUP BY子句 12 1.4.2 使用GROUP BY ALL 13 1.4.3 使用HAVING选择性地查询分组的数据 13 1.5 对结果排序 14 1.5.1 使用ORDER BY子句 15 1.5.2 在排序的结果中使用TOP关键字 16 1.6 SELECT子句技术 18 1.6.1 使用DISTINCT消除重复值 18 1.6.2 在聚合函数中使用DISTINCT 18 1.6.3 使用列别名 19 1.6.4 使用SELECT创建脚本 20 1.6.5 字符串拼接 21 1.6.6 使用SELECT创建逗号分隔的列表 21 1.6.7 使用INTO子句 22 1.7 子查询 23 1.8 从多个数据源查询 24 1.8.1 使用内联结 25 1.8.2 使用外联结 26 1.8.3 使用交叉联结 27 1.8.4 在同一查询中多次引用同一个表 27 1.8.5 使用衍生表 28 1.8.6 使用UNION组合结果集 29 1.9 使用APPLY来为每行调用表值函数 30 1.9.1 使用CROSS APPLY 30 1.9.2 使用OUTER APPLY 32 1.10 数据源高级技术 33 1.10.1 使用TABLESAMPLE来返回随机行 33 1.10.2 使用PIVOT把单列值转化为多列和聚合数据 34 1.10.3 使用UNPIVOT
<p> <span style="color:#4d4d4d;">当前课程中博客项目的实战源码是我在 GitHub上开源项目 My-Blog,目前已有 2000 多个 star:</span> </p> <p> <span style="color:#4d4d4d;"><img src="https://img-bss.csdnimg.cn/202103310649344285.png" alt="" /><br /> </span> </p> <p> <span style="color:#4d4d4d;">本课程是一个 Spring Boot 技术栈的实战类课程,课程共分为 3 大部分,前面两个部分为基础环境准备和相关概念介绍,第三个部分是 Spring Boot 个人博客项目功能的讲解,<span style="color:#565656;">通过本课程的学习,不仅仅让你掌握基本的 Spring Boot 开发能力以及 Spring Boot 项目的大部分开发使用场景,同时帮你提前甄别和处理掉将要遇到的技术难点,认真学完这个课程后,你将会对 Spring Boot 有更加深入而全面的了解,同时你也会得到一个大家都在使用的博客系统源码,你可以根据自己的需求和想法进行改造,也可以直接使用它来作为自己的个人网站,这个课程一定会给你带来巨大的收获。</span></span> </p> <p> <span style="color:#4d4d4d;"><span style="color:#565656;"> </span></span> </p> <p> <span style="color:#e53333;"><span style="color:#e53333;"><strong>课程特色</strong></span></span> </p> <p> <span style="color:#e53333;"><span style="color:#e53333;"><strong> </strong></span></span> </p> <p> <span style="color:#4d4d4d;"><span style="color:#565656;"> </span></span> </p> <ol> <li> <span style="color:#565656;">课程内容紧贴 Spring Boot 技术栈,涵盖大部分 Spring Boot 使用场景。</span> </li> <li> <span style="color:#565656;">开发教程详细完整、文档资源齐全、实验过程循序渐进简单明了。</span> </li> <li> <span style="color:#565656;">实践项目页面美观且实用,交互效果完美。</span> </li> <li> <span style="color:#565656;">包含从零搭建项目、以及完整的后台管理系统和博客展示系统两个系统的功能开发流程。</span> </li> <li> <span style="color:#565656;">技术栈新颖且知识点丰富,学习后可以提升大家对于知识的理解和掌握,对于提升你的市场竞争力有一定的帮助。</span> </li> </ol> <p> <strong>实战项目预览</strong> </p> <p> <span style="color:#4d4d4d;"><span style="color:#565656;"><span style="color:#e53333;"><strong> </strong></span></span></span> </p> <p> <span style="color:#4d4d4d;"><img src="https://img-bss.csdn.net/202005150303066258.png" alt="" /><br /> </span> </p> <p>   </p> <p> <span style="color:#4d4d4d;"> </span> </p> <p> <span style="color:#4d4d4d;"><img src="https://img-bss.csdn.net/202005150305396930.png" alt="" /><br /> </span> </p> <p> <span style="color:#4d4d4d;"> </span> </p> <p> <span style="color:#4d4d4d;"><img src="https://img-bss.csdn.net/202005150305528842.png" alt="" /><br /> </span> </p> <p> <span style="color:#4d4d4d;"> </span> </p> <p> <span style="color:#4d4d4d;"><img src="https://img-bss.csdn.net/202005150306056323.png" alt="" /><br /> </span> </p>
包含以下内容: 第一部分 基础篇 001 第一个C程序 002 运行多个源文件 003 求整数之积 004 比较实数大小 005 字符的输出 006 显示变量所占字节数 007 自增/自减运算 008 数列求和 009 乘法口诀表 010 猜数字游戏 011 模拟ATM(自动柜员机)界面 012 用一维数组统计学生成绩 013 用二维数组实现矩阵转置 014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 寻找指定元素的指针 025 寻找相同元素的指针 026 阿拉伯数字转换为罗马数字 027 字符替换 028 从键盘读入实数 029 字符行排版 030 字符排列 031 判断字符串是否回文 032 通讯录的输入输出 033 扑克牌的结构表示 034 用“结构”统计学生成绩 035 报数游戏 036 模拟社会关系 037 统计文件的字符数 038 同时显示两个文件的内容 039 简单的文本编辑器 040 文件的字数统计程序 041 学生成绩管理程序 第二部分 数据结构篇 042 插入排序 043 希尔排序 044 冒泡排序 045 快速排序 046 选择排序 047 堆排序 048 归并排序 049 基数排序 050 二叉搜索树操作 051 二项式系数递归 052 背包问题 053 顺序表插入和删除 054 链表操作(1) 055 链表操作(2) 056 单链表就地逆置 057 运动会分数统计 058 双链表 059 约瑟夫环 060 记录个人资料 061 二叉树遍利 062 浮点数转换为字符串 063 汉诺塔问题 064 哈夫曼编码 065 图的深度优先遍利 066 图的广度优先遍利 067 求解最优交通路径 068 八皇后问题 069 骑士巡游 070 用栈设置密码 071 魔王语言翻译 072 火车车厢重排 073 队列实例 074 K阶斐波那契序列 第三部分 数值计算与趣味数学篇 075 绘制余弦曲线和直线的迭加 076 计算高次方数的尾数 077 打鱼还是晒网 078 怎样存钱以获取最大利息 079 阿姆斯特朗数 080 亲密数 081 自守数 082 具有abcd=(ab+cd)2性质的数 083 验证歌德巴赫猜想 084 素数幻方 085 百钱百鸡问题 086 爱因斯坦的数学题 087 三色球问题 088 马克思手稿中的数学题 089 配对新郎和新娘 090 约瑟夫问题 091 邮票组合 092 分糖果 093 波瓦松的分酒趣题 094 求π的近似值 095 奇数平方的有趣性质 096 角谷猜想 097 四方定理 098 卡布列克常数 099 尼科彻斯定理 100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 111 绘制正态分布曲线 112 求解非线性方程 113 实矩阵乘法运算 114 求解线性方程 115 n阶方阵求逆 116 复矩阵乘法 117 求定积分 118 求满足特异条件的数列 119 超长正整数的加法 第四部分 图形篇 120 绘制直线 121 绘制圆 122 绘制圆弧 123 绘制椭圆 124 设置背景色和前景色 125 设置线条类型 126 设置填充类型和填充颜色 127 图形文本的输出 128 金刚石图案 129 飘带图案 130 圆环图案 131 肾形图案 132 心脏形图案 133 渔网图案 134 沙丘图案 135 设置图形方式下的文本类型 136 绘制正多边形 137 正六边形螺旋图案 138 正方形螺旋拼块图案 139 图形法绘制圆 140 递归法绘制三角形图案 141 图形法绘制椭圆 142 抛物样条曲线 14
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页