参考来源:http://msdn.microsoft.com/en-us/library/cc645577(v=sql.110).aspx
10.Sequence Objects
这是一个迟到的特性,谈不上新。其他的数据库早就有了,而SQL Server竟然拖到今天才实现。SQL Server之前只提供IDENTITY()和IDENT_...()函数族,一直缺少一个管理ID类型的对象。现在终于有了。
独立的ID对象最大的好处就是允许不同表共享同一组ID了。比如某网上商城应用,不同的商品根据类别分别建表。在独立ID之前,要确定某唯一商品,除了提供商品ID还需要提供商品类别代码。而现在就可以在不同类别商品表之间共享同一个sequence object,这样给定一个id,正常情况下所有表中有且只有一条记录对应。
参考链接:http://msdn.microsoft.com/en-us/library/ff878058(v=sql.110).aspx
11.THROW statement
简单的说,这是对BEGIN TRY... END TRY BEGIN CATCH ... END CATCH的补完。之前只能用RAISERROR()模拟。
参考链接:http://msdn.microsoft.com/en-us/library/ee677615(v=sql.110).aspx
12.14 New Functions and 1 Changed Function
一堆新的函数。大部分和日期时间有关。
Conversion functions
Date and time functions
Logical functions
-
CHOOSE (Transact-SQL) --之前用CASE表达式模拟
-
IIF (Transact-SQL) --之前用CASE表达式模拟
String functions
还有一个有变动的数学函数:
13.SQL Server Express LocalDB
简单的说,一个更简单,更容易使用的SQL Server Express版本。
参考链接:http://msdn.microsoft.com/en-us/library/hh510202(v=sql.110).aspx
14.New and Enhanced Query Optimizer Hints
简单的说,就是修改了FORCESEEK和FORCESCAN这2个查询提示的语义。
参考链接:http://msdn.microsoft.com/en-us/library/ms187373(v=sql.110).aspx
15.Extended Event Enhancements
简单的说,就是提供了一些新的扩展事件和字段。
16.OVER Clause Support Enhanced
简单的说,就是为排名函数的OVER子句提供新的语法。增加了ROW和RANGE词条,目的就是为了方便累积求和。
示例:
SELECT BusinessEntityID, TerritoryID
,CONVERT(varchar(20),SalesYTD,1) AS SalesYTD
,DATEPART(yy,ModifiedDate) AS SalesYear
,CONVERT(varchar(20),SUM(SalesYTD) OVER (PARTITION BY TerritoryID
ORDER BY DATEPART(yy,ModifiedDate)
ROWS UNBOUNDED PRECEDING),1) AS CumulativeTotal
FROM Sales.SalesPerson
WHERE TerritoryID IS NULL OR TerritoryID < 5;
执行结果:
BusinessEntityID TerritoryID SalesYTD SalesYear CumulativeTotal
---------------- ----------- -------------------- ----------- --------------------
274 NULL 559,697.56 2005 559,697.56
287 NULL 519,905.93 2006 1,079,603.50
285 NULL 172,524.45 2007 1,252,127.95
283 1 1,573,012.94 2005 1,573,012.94
280 1 1,352,577.13 2005 2,925,590.07
284 1 1,576,562.20 2006 4,502,152.27
275 2 3,763,178.18 2005 3,763,178.18
277 3 3,189,418.37 2005 3,189,418.37
276 4 4,251,368.55 2005 4,251,368.55
281 4 2,458,535.62 2005 6,709,904.17
注意最后一列CumulativeTotal,每行的结果是上一行的CumulativeTotal加上本行的SalesYTD。
参考链接:http://msdn.microsoft.com/en-us/library/ms189461(v=sql.110).aspx
17.Analytic Functions
一堆新的分析函数。
PERCENTILE_DISC (Transact-SQL)
PERCENTILE_CONT (Transact-SQL)
18.XQuery Functions Are Surrogate-Aware
简单说,就是增加了2个新的XQuery函数,分别是fn:string-length()和fn:substring(),看名字也知道这2个函数是干嘛的。另外还改了两个XQuery函数,分别是fn:contains()和fn:concat()。
参考链接:http://msdn.microsoft.com/en-us/library/ms143179(v=sql.110).aspx
值得一提的是,最后这个链接不仅仅包括XQuery Function的内容,还包括其他内容,标题是Breaking Changes to Database Engine Features in SQL Server 2012。主要内容有:
NEXT和WITHIN现在是关键字了;
CTE最大嵌套层数从100扩大到110;
sp_setapprole和sp_unsetapprole还有EXECUTE AS的OUTPUT参数默认改为varbinary(8000) ;
CAST和CONVERT对time类型的处理有变化;
ALTER TABLE现在只允许2部分的表名格式了。这意味着ALTER TABLE server.database.schema.table 或者ALTER TABLE database.schema.table 或者ALTER TABLE ..schema.table 都是不允许的了。只有ALTER TABLE schema.table才行。这条最主要是避免跨数据库改表吧;
对于SET NOCOUNT OFF,如果select语句执行失败,row count message以前是返回-1,现在是返回0.个人认为这条对一些比较靠近底层的应用有影响。