SQL Server2012在开发中的一些新特性
一、增加了Sequence对象。 这个对于Oracle用户来说是最熟悉不过的网站数据库对象了,现在在SQL Server中终于也看到了类似的对象,只是在使用的语法上有一点点不一样。创建语法也是CREATE,复制具体相关代码 具体相关代码如下:,CREATE SEQUENCE [dbo].[SQ_1] AS [bigint] START WITh 1 INCREMENT BY 1;,SELECT NEXT VALUE FOR [SQ_1] AS FirstUse;,假如如果要插入一个值,那么就是:,复制具体相关代码 具体相关代码如下:,INSERT INTO t1(c1,c2) VALUES (NEXT VALUE FOR SQ_1, 'Test') ;,但是好像没有提供获得当前值的语法,难道必须取下一个值?,二、新的分页查询语法。 以前在SQL Server中分页,最早是用top或者临时表,后来出现了ROW_NUMBER函数实现分页,现在最新的SQL2012可以在order by子句后跟offset和fe,复制具体相关代码 具体相关代码如下:,select * from ( select *,ROW_NUMBER() over(order by p.PROJECT_ID) R from PROJECT p where p.IS_DELETE,SELECT * FROM PROJECT p where p.IS_DELETED=0 ORDER BY p.PROJECT_ID OFFSET 10001 ROWS FETCh NEXT 20 R,显然使用了新的语法后具体相关代码看起来更简洁,意思表达也更明确。从执行效率上来讲,试了一下,是一样的。,三、一些新的系统函数。 3.1相当于C#中三目运算符的IIF函数,这个函数和VBA中的IIF函数相同,判断第一个参数的表达式是否为真,真则返回第二个参数,假则返回第三个参数。,有了这个函数很多时候咱们可以不用再使用复杂的case when语法了。比如咱们判断项目的大小以显示对应的字符串,那么老的写法是:,复制具体相关代码 具体相关代码如下:,select p.CODE,case when p.SIZE>100 then 'Big' else 'Small' end as SIZE_STRING from PROJECT p where S,现在,咱们可以简单的写成:,复制具体相关代码 具体相关代码如下:,select p.CODE,IIF(p.SIZE>100,'Big','Small') as SIZE_STRING from PROJECT p where SIZE is not null,3.2不用判断类型和NULL的字符串连接CONCAT函数,SQL Server本来对字符串的连接很简单,直接使用“ ”号,但是需要注意两个问题,一是必须类型都是字符串类型,假如如果是数字类型那么会报语法错误,所以必须把数字类型转换为字符串。二是假如如果其中的某个值为,复制具体相关代码 具体相关代码如下:,select p.PROJECT_ID, p.CODE ',' p.NAME ',' ISNULL(p.NICK_NAME,'') ',' ISNULL(CONVERT(varchar(50),p.S,现在使用CONCAT函数,直接忽略其中的类型,忽略对NULL的检查,直接连接成一个非空的字符串:,复制具体相关代码 具体相关代码如下:,select p.PROJECT_ID,CONCAT( p.CODE,',',p.NAME,',',p.NICK_NAME,',',p.SIZE) from PROJECT p,可以明显感觉到简洁了很多。,3.3转换成字符串时设置格式的FORMAT函数。,以前要把数字或者日期转换成字符串,可以使用CONVERT函数并带人第三个整数类型的参数指定转换的格式,不过这种具体相关方法太麻烦,整数参数不容易理解和记忆,而且也不灵活。现在的FORMAT函数相当于C#中的S,复制具体相关代码 具体相关代码如下:,select p.PROJECT_ID,FORMAT(p.CREATED_TIME,'yyyy-MM-dd'),CONVERT(varchar(50),p.CREATED_TIME,112) from,3.4让枚举显示更方便的ChOOSE函数。,在程序中经常使用枚举值,在网站数据库中使用tinyint来保存枚举值,但是在查看时却不是很容易理解枚举值的含义,必须查看具体相关代码看1对应什么,2对应什么才知道。在显示的时候假如如果要显示成字符串,那么就需要使用c,复制具体相关代码 具体相关代码如下:,select p.CODE,ChOOSE( p.STATUS,'Plan','Exec','Complete','Abort','Fail') from PROJECT p,ChOSSE函数比case when有几个缺点,1是不支持0和负数,所以假如如果枚举的值是0那么就没办法显示,2是枚举值必须连续而且比较小,不能使用100、200等值,那要是用ChOOSE那得写死人了。没,3.5各种日期时间函数。,除了一个EOMONTh函数是返回给定日期的最后一天外,其他的新函数,都是把年月日作为参数传进去,返回指定数据类型的对象,相当于就是CONVERT函数的变形。总体使用不多,在此不多介绍。,四、OVER子句的增强和新增一些分析函数。 之前OVER子句是用于RANK,ROW_NUMBER等排名函数,现在OVER子句得到了大大的增强, 可以将OVER子句应用到聚合函数中,也增加了一些分析函数,比如我有一个项目和客户表,一个客户对于多个项目,现在需要知道客户的信息和每个客户的最新项目Code,这个要是以前还不好实现,现在咱们有了分析函数,可以使用FIRST_VALUE或者LAST_VALUE,复制具体相关代码 具体相关代码如下:
复制具体相关代码 具体相关代码如下:
parsename可以返回四个值
= Object name
= Schema name
= Database name
= Server name
select parsename(ip,1) from cs
,2,3,4 中的1指得是第一个小数点后的数字,从右向左数,倒序.
复制具体相关代码 具体相关代码如下:
Select parsename('A,B,C.C,E.F',2)---parsename的语法就是 截取点 '.' 后面的字符串,1为倒数第一,2为倒数第二...