面向开发人员的SQL Server2012新功能
类型:编程工具大小:4.9M语言:中文评分:1.6标签:立即下载sql server 2012。它已经发布一段时间了。最近新机上安装了最新的SQL Server 2012 SP1,体检后感觉还不错。官方给出了很多SQL2012相对于SQL2008R2的新特性,但大部分对于普通开发者来说只是浮云,完全不需要。让我们谈谈一些对开发人员有用的新特性。
一、增加了序列对象:
这是Oracle用户最熟悉的数据库对象。现在,类似的对象终于在SQL Server中看到了,但是使用的语法略有不同。Create语法也是CREATE SEQUENCE。使用它时,您需要使用下一个值来获取下一个值:
CREATE SEQUENCE [dbo]。[SQ_1]作为[bigint]从1开始,递增1;选择[SQ_1]的下一个值作为第一次使用;
如果要插入一个值,它是:
插入t1(c1,c2)值(SQ_1的下一个值,“测试”);
但是似乎没有语法来获取当前值。你一定要取下一个值吗?
二、新的分页查询语法:
SQL Server中的分页首先使用顶表或临时表,然后使用ROW_NUMBER函数实现分页。现在,最新的SQL2012可以在order by子句之后用offset和fetch进行分页,这感觉有点像LINQ语法。例如,如果您在1W行之后查询20个有效项目信息,那么ROW_NUMBER分页查询的SQL为:
从(选择*,ROW_NUMBER())中选择*(按p.PROJECT_ID排序)从PROJECt pwhere p . IS _ DELETED=0)x其中x.R在10001和10020之间
但是使用新的语法,查询语句是:
从项目中选择*此处p . IS _ DELETED=按p.PROJECT_ID排序偏移量10001行仅选择下20行;
显然,使用新语法后,代码看起来更简单,意思表达也更清晰。从执行效率来说,试一试也是一样的。
第三,一些新的系统功能:
3.1 c#中等价于三项式算子的IIF函数
该功能与VBA的IIF功能相同。它判断第一个参数的表达式是否为真,如果为真则返回第二个参数,如果为假则返回第三个参数。
有了这个函数,我们在多次语法的时候就不用使用复杂的大小写了。例如,如果我们判断项目的大小来显示相应的字符串,旧的写法是:
选择p.CODE,大小写为p.SIZE100,则“大”或“小”以SIZE_STRINGfrom PROJECT结尾,其中SIZE不为空
现在,我们可以简单地写道:
从项目中选择p.CODE,IIF(p.SIZE100,'大','小')作为SIZE_STRINGfrom项目大小不为空
3.2不判断类型和空字符串连接CONCAT函数
以前SQL Server连接字符串比较简单,直接使用" ",但是要注意两个问题。首先,所有类型都必须是字符串类型。如果是数字类型,将报告语法错误,因此数字类型必须转换为字符串。第二,如果其中一个值为null,那么整个连接的结果就是一个null字符串,所以需要判断null,所以原本只是一个连接字符串的查询会非常复杂:
从项目p中选择p.PROJECT_ID,p.CODE ',' p.NAME ',' ISNULL(p.NICK_NAME),',' ISNULL(CONVERT(varchar(50),p.SIZE),')
现在使用CONCAT函数,忽略类型,忽略NULL的检查,直接连接到非空字符串:
从项目p中选择p.PROJECT_ID,CONCAT(p.CODE,',',p.NAME,',p.NICK_NAME,',',p.SIZE)
可以清楚地感受到大量的简洁。
3.3 FORMAT函数,用于在转换为字符串时设置格式。
过去,要将数字或日期转换为字符串,可以使用带有第三个整数类型参数的CONVERT函数来指定转换格式。但是这种方法太麻烦,整数参数不容易理解和记忆,也不灵活。FORMAT函数现在相当于字符串。C#中的Format函数,在第二个参数中可以找到想要的输出格式。
从项目p中选择项目标识、格式(p.CREATED_TIME,' yyy-MM-dd ')、转换(varchar(50),p.CREATED_TIME,112)
3.4让枚举显示更加方便的CHOOSE功能。
枚举值经常在程序中使用,tinyint在数据库中用于保存枚举值。但是,在查看枚举值时,不容易理解它们的含义。你必须检查代码,看看1对应什么,2对应什么。如果要显示为字符串,需要用大小写来判断。现在,您可以使用CHOOSE函数轻松地将枚举转换为字符串。例如,要显示项目的状态,我们的查询是:
从项目中选择项目代码、选择(项目状态、“计划”、“执行”、“完成”、“中止”、“失败”)
与case相比,CHOSSE函数有几个缺点。1不支持0和负数,因此如果枚举值为0,则无法显示。2、枚举值必须连续且相对较小,不能使用100和200的值。如果你用CHOOSE,你会写死人。没有默认值。当使用case when时,有一个else值,如果没有匹配可以显示,如果使用CHOOSE后没有匹配,则为NULL值。所以我个人觉得这个功能的使用非常
3.5各种日期和时间功能。
除了一个EOMONTH函数返回给定日期的最后一天之外,所有其他新函数都以年、月和日作为参数传递,并返回具有指定数据类型的对象,这相当于CONVERT函数的变形。整体用处不多,这里就不介绍了。
第四,加强OVER子句,增加一些分析功能:
过去,OVER子句用于RANKing函数,如rank、ROW_NUMBER等。现在OVER子句得到了很大的增强,可以应用于聚合函数,并且增加了一些分析函数。
例如,我有一个项目和客户表。客户需要知道多个项目的客户信息和每个客户的最新项目代码。如果这在以前不容易实现,现在我们有了一个分析函数,我们可以使用带有OVER子句的FIRST_VALUE或LAST_VALUE来获得期望的结果:
选择distinct c.*,FIRST _ VALUE(p . CODE)over(PARTITION BY c . CLIENT _ ID order BY p .[CREATED _ TIME]desc)作为LAST _ PROJECt _ CODE from PROJECt pinner join CLIENT con p . CLIENT _ ID=c . CLIENT _ ID
版权声明:面向开发人员的SQL Server2012新功能是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。