SQL Server2012在开发中的一些新特性
SQL Server 2012及其SP1版本已经落地一段时间了,最近我在新机器上体验了的SQL Server 2012 SP1,感觉性能卓越。SQL Server 2012相对于之前的版本,拥有许多引人注目的新特性。对于我们这些普通开发人员来说,其中一些特性尤为实用。
一、Sequence对象的引入
二、新的分页查询语法
在SQL Server中分页查询一直是重要的功能。过去我们常用临时表或者ROW_NUMBER函数实现分页。但在SQL Server 2012中,我们可以使用更简洁、直观的语法来实现分页查询。例如,要查询第1万行之后的20条记录,新的语法允许我们直接使用`ORDER BY ... OFFSET ... ROWS FETCH NEXT ... ROWS ONLY`语句。这种语法更接近现代查询语言的标准,使得分页查询更为直观和高效。
三、实用的新系统函数
SQL Server 2012还引入了一些非常实用的新系统函数。其中,IIF函数类似于编程中的三目运算符,可以简化许多条件判断的逻辑。例如,我们可以使用`IIF(p.SIZE>100,'Big','Small')`来替代复杂的CASE WHEN语句。还有新的字符串连接函数CONCAT,它无需判断类型和NULL,直接对字符串进行连接,这使得字符串操作更为方便。过去我们使用“+”号连接字符串时,需要注意数据类型和NULL值的处理,而CONCAT函数则简化了这一过程。
曾经,当我们需要连接某些字段并忽略其中的null值时,我们不得不借助冗长的代码,如使用ISNULL函数进行null值的检查和处理。现在有了CONCAT函数,这一切都变得简洁起来。只需一行代码,就能轻松完成字符串的连接。例如:
```sql
select p.PROJECT_ID, CONCAT(p.CODE,',',p.NAME,',',p.NICK_NAME,',',p.SIZE) from PROJECT p
```
这一改进不仅提升了代码的简洁性,还大大提高了开发效率。
以前,数字或日期的格式化转换是一个技术难题。那时的CONVERT函数需要我们记忆并输入复杂的整数参数来指定格式,这既繁琐又难以理解和记忆。而现在,FORMAT函数的出现让格式化变得像C中的String.Format一样简单灵活。例如:
```sql
select p.PROJECT_ID, FORMAT(p.CREATED_TIME,'yyyy-MM-dd') from PROJECT p
```
只需要指定想要的输出格式即可轻松实现转换。
数据库中的枚举值虽然用tinyint保存,但在查看时却难以理解其具体含义。CHOOSE函数的引入解决了这一问题。它允许我们轻松地将枚举值转换为字符串。例如:
```sql
select p.CODE, CHOOSE(p.STATUS,'Plan','Exec','Complete','Abort','Fail') from PROJECT p
```
尽管CHOOSE函数在某些情况下有其局限性,如不支持0和负数枚举值以及没有default值,但它的使用仍然大大简化了枚举值的显示。
除了这些改进,SQL的日期时间函数也经历了发展。现在,我们可以使用一系列新的日期时间函数来处理各种日期时间问题。OVER子句的增强和新增的分析函数使得复杂查询变得更加简单。例如,要获取每个客户的项目Code,我们可以这样操作:
```sql
select distinct c., FIRST_VALUE(p.CODE) over(PARTITION BY c.CLIENT_ID order by p.[CREATED_TIME] desc) as LAST_PROJECT_CODE from PROJECT p inner join CLIENT c on p.CLIENT_ID=c.CLIENT_ID
```
这些新增的函数和子句大大增强了SQL的功能和易用性,使得数据处理更加高效和便捷。
这些改进和创新不仅提高了SQL的效率和功能,也让开发者能够更轻松地编写出高质量、易于维护的代码。随着技术的不断进步,我们期待SQL能继续发展,为我们带来更多的便利和惊喜。
编程语言
- SQL Server2012在开发中的一些新特性
- php异步-在php中使用fsockopen curl实现类似异步处理
- 几种另类的ASP后门
- ASP下检测图片木马的函数代码
- JavaScript实现算术平方根算法-代码超简单
- Asp.net静态方法之Grid转DataTable方法实现步骤
- PHP中list方法用法示例
- 实现div内部滚动条滚动到底部和顶部的代码
- SQL Server 日期函数CAST 和 CONVERT 以及在业务中的使
- 原生js实现form表单序列化的方法
- jQuery插件 Jqplot图表实例
- js实现增加数字显示的环形进度条效果
- ASP.NET Lable中进行换行解决方案
- Vuex 单状态库与多模块状态库详解
- 浅谈Nodejs应用主文件index.js
- 基于AGS JS开发自定义贴图图层