SQL Server 2012可编程性上的一些新特性(2)

参考来源: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

String functions

还有一个有变动的数学函数:

  LOG()

 

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

一堆新的分析函数。

CUME_DIST (Transact-SQL)

LAST_VALUE (Transact-SQL)

PERCENTILE_DISC (Transact-SQL)

FIRST_VALUE (Transact-SQL)

LEAD (Transact-SQL)

PERCENT_RANK (Transact-SQL)

LAG (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.个人认为这条对一些比较靠近底层的应用有影响。

 

posted on 2012-03-08 13:07  dk163  阅读(281)  评论(0编辑  收藏  举报

导航