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

参考来源:http://msdn.microsoft.com/en-us/library/cc645577(v=sql.110).aspx

1.Native XML Web Services (SOAP/HTTP endpoints) is Removed

简单说,微软从SQL Server 2012开始取消了数据库层面的Web Services支持。我认为这是MS面对现实的一个进步。在现实世界中,没有人会允许来自HTTP的连接直接从数据库提取数据。

 

2.FileTables

简单说,就是对SQL Server 2008的FILESTREAM的争强。利用FileTables,数据库的角色从数据存储转变为数据管理,而存储的任务则交给了文件系统。这样做的好处是大大方便了数据的使用者。举个简单的例子,对于图像数据,如果存在数据库里面,要查看和修改都是很不方便的事。而在文件系统中,无论是编辑,查看图像都有非常丰富的应用程序提供支持。

参考链接:http://msdn.microsoft.com/en-us/library/ff929144(v=sql.110).aspx

 

3.Statistical Semantic Search

简单说,就是语义查找。这个新特性是配合FileTables使用的,从而使SQL Server可以扩展到关系数据库以外的搜索领域,进入桌面搜索领域。

核心函数:

semantickeyphrasetable() --查找关键词

semanticsimilaritytable() --查找近似文件

semanticsimilaritydetailstable() --在近似文件中查找关键词

示例:

SET @Title = 'Sample Document.docx'

SELECT @DocID = DocumentID
    FROM Documents
    WHERE DocumentTitle = @Title

SELECT @Title AS Title, keyphrase, score
    FROM SEMANTICKEYPHRASETABLE(Documents, *, @DocID)
    ORDER BY score DESC

GO

SET @Title = 'Sample Document.docx'

SELECT @DocID = DocumentID
    FROM Documents
    WHERE DocumentTitle = @Title

SELECT @Title AS SourceTitle, DocumentTitle AS MatchedTitle,
        DocumentID, score
    FROM SEMANTICSIMILARITYTABLE(Documents, *, @DocID)
    INNER JOIN Documents ON DocumentID = matched_document_key
    ORDER BY score DESC

GO

SET @SourceTitle = 'first.docx'
SET @MatchedTitle = 'second.docx'

SELECT @SourceDocID = DocumentID FROM Documents WHERE DocumentTitle = @SourceTitle
SELECT @MatchedDocID = DocumentID FROM Documents WHERE DocumentTitle = @MatchedTitle

SELECT @SourceTitle AS SourceTitle, @MatchedTitle AS MatchedTitle, keyphrase, score
    FROM semanticsimilaritydetailstable(Documents, DocumentContent,
        @SourceDocID, DocumentContent, @MatchedDocID)
    ORDER BY score DESC

GO

 

4.Full-Text Search

全文索引。微软这几年一直在这方面发力,FileTables和Statistical Semantic Search是这方面的最新成果。微软也努力将这些成果整合进已有功能。但摆在MS前面的路还很长。

 

5.New and Enhanced Spatial Features

简单说,就是空间(地理)数据库方面增加了一些新的数据类型和函数。随着移动互联网的发展,基于位置的应用也越来越多,这些应用都要求后台有空间数据的支持。微软在这方面其实还算新手,不过发展很快。目前MS最缺的是这方面有影响力的实际应用。

参考链接(Word):http://go.microsoft.com/fwlink/?LinkId=226407

 

6.Metadata Discovery

简单说,就是一些新的管理函数。包括:

SET FMTONLY --值为ON/OFF。为ON的时候进编译语句,不实际执行。默认为OFF。在SQL Server 2012之前可以用SET SHOWPLAN_TEXT和SET SHOWPLAN_XML来模拟。

sp_describe_first_result_set --返回第一个查询结果集的字段信息

sp_describe_undeclared_parameters --返回未定义的参数信息

sys.dm_exec_describe_first_result_set --功能等同sp_describe_first_result_set,但是是以管理函数方式提供

sys.dm_exec_describe_first_result_set_for_object --功能等同 sys.dm_exec_describe_first_result_set,但是参数限定为一个Object_id,通常是一个表,视图或者存储过程。 

 

7.EXECUTE Statement

简单说,就是从SQL Server 2012开始,可以对存储过程返回的结果集进行定制了。这是我最看好的2个新特性之一,另一个是关于ORDER BY的。

微软为EXECUTE语句扩展了新的语法,增加了WITH RESULT SETS 词条。利用WITH RESULT SETS,我们可以对存储过程返回的结果集进行定制,甚至允许存储过程不要返回结果集。

对这点,我是深有感触。尤其是在调用一些系统存储过程的时候,由于对返回结果不可控,在前端程序编写上有很多忌讳。通常我的做法是使用INSERT INTO ... EXEC ...来间接绕过这个问题。有了这个新特性,至少执行效率上要提高不少。

示例:

USE AdventureWorks2012;
GO

EXEC uspGetEmployeeManagers 16
WITH RESULT SETS
( 
   ([Reporting Level] int NOT NULL,
    [ID of Employee] int NOT NULL,
    [Employee First Name] nvarchar(50) NOT NULL,
    [Employee Last Name] nvarchar(50) NOT NULL,
    [Employee ID of Manager] nvarchar(max) NOT NULL,
    [Manager First Name] nvarchar(50) NOT NULL,
    [Manager Last Name] nvarchar(50) NOT NULL )
);

 

参考链接:http://msdn.microsoft.com/en-us/library/ms188332(v=sql.110).aspx

 

8.UTF-16 Support

UTF-16支持。增加了一些针对UTF-16的字符集。这些字符集以_SC结尾。如Japanese_Bushu_Kakusu_100_CI_AS_SC。

 

9.Ad-hoc Query Paging Implementation

简单的说,就是微软对ORDER BY增强了。这是我最看好的一个SQL Server 2012新特性。

微软为ORDER BY语句扩展了新的语法,增加了OFFSET和FEACH词条,目的就是为了分页。

目前对于大多数应用,分页是一个不可避免的问题。传统的做法要么是基于SELECT TOP,要么是使用存储过程。SELECT TOP没法利用查询缓存,而存储过程在使用上又有诸多限制。这也是为什么微软将此特性命名为Ad-hoc Query Paging Implementation的原因。利用新的特性,同一SELECT 语句可以返回同一结果集的不同部分,从而达到充分利用缓存的目的。

示例:

USE AdventureWorks2012;
GO

-- Specifying expressions for OFFSET and FETCH values    
DECLARE @StartingRowNumber tinyint = 1
      , @EndingRowNumber tinyint = 8;
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID ASC 
    OFFSET @StartingRowNumber - 1 ROWS 
    FETCH NEXT @EndingRowNumber - @StartingRowNumber + 1 ROWS ONLY
OPTION ( OPTIMIZE FOR (@StartingRowNumber = 1, @EndingRowNumber = 20) );

 

 参考链接:http://msdn.microsoft.com/en-us/library/ms188385(v=sql.110).aspx

 

 

转载于:https://www.cnblogs.com/dengkang/archive/2012/03/08/2385013.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值