SQL Server 2012 T-SQL 新特性
原文:SQL Server 2012 T-SQL 新特性

序列 Sequence

SQL Server 现在将序列当成一个对象来实现,创建一个序列的例子语法如下:

CREATE SEQUENCE DemoSequence
START WITH 1
INCREMENT BY 1;

使用序列的方法如下所表达的:

SELECT VALUE FOR DemoSequence

序列与以前的种子列(identity)的区别很明显,种子列只限于当前列,而序列是一个对象层面的实现,则可以在多个表之间共享。这一点特点在管理软件序列号生成方面,是个不错的开始。和种子列相似,序列也可以重置,例子如下

ALTER SEQUENCE Samples.IDLabel
RESTART WITH 1 ;

序列的值可以使用整型类型,比如tinyint, smallint, int, bigint, decimal 或是小数精度为0的数值类型。

序列的限制(limitation)有二个,一是序列不支持事务,即使事务中进行了回滚(rollback)操作,序列仍然返回下一个元素。

第二,序列不支持SQL Server 复制(replication),序列不会复制到订阅的SQL Server实例中。如果一个表的默认值依赖一个序列,而序列又是不可复制的,这会导致订阅的SQL Server出现脚本错误。

数据分页 Page Data

SQL Server一直在改善数据分页方法,SQL Server 2005内置的row_number函数可以实现,例子代码如下

SELECT *
FROM (
SELECT ROW_NUMBER() OVER(ORDER BY CustomerID) AS sequencenumber, *
FROM Customers) AS TempTable
WHERE sequencenumber > 10 and sequencenumber <= 20

SQL Server 2012有更简洁的语法,例子代码如下所示

SELECT *
FROM Customers
ORDER BY CustomerID
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;

依据客户编号排序,跳过前面10笔记录,取第10笔记录。这很像Linq中的Skip.Take,Linq语法例子如下

var customers=customerList.Skip(10).Take(10);

异常处理 Exception Handling

SQL Server 2005引入了类似于.NET语言的异常处理机制到T-SQL代码中,请参考下面的例子

BEGIN TRYBEGIN TRANSACTION – Start the transaction-- Delete the CustomerDELETE FROM CustomersWHERE EmployeeID = ‘CACTU’-- Commit the changeCOMMIT TRANSACTION
END TRY
BEGIN CATCH-- There is an errorIF @@TRANCOUNT > 0ROLLBACK TRANSACTION-- Raise an error with the details of the exceptionDECLARE @ErrMsg nvarchar(4000), @ErrSeverity intSELECT @ErrMsg = ERROR_MESSAGE(),@ErrSeverity = ERROR_SEVERITY()RAISERROR(@ErrMsg, @ErrSeverity, 1)
END CATCH

如果在catch语句块中捕获了异常,只能引用RaiseError函数来继续抛出异常。新版本的SQL Server引入了throw关键字,可取代RaiseError函数的作用。参考代码如下

BEGIN TRYBEGIN TRANSACTION -- Start the transaction-- Delete the CustomerDELETE FROM CustomersWHERE EmployeeID = ‘CACTU’-- Commit the changeCOMMIT TRANSACTION
END TRY
BEGIN CATCH-- There is an errorROLLBACK TRANSACTION-- Re throw the exceptionTHROW
END CATCH

异常处理机制的一个好处是N层回滚(rollback),抛出异常的程序,逐层向上寻找,直到找到处理异常的代码。

存储过程执行改善 Execute Procedure Enhanced

在旧的SQL Server版本中,要返回一个查询语句的列信息,可以使用SET FMTONLY语句,它返回结果列,而不是实际的数据,请参考运行下面的语句:

SET FMTONLY ON;
GO
SELECT *    FROM  dbo.GBITEM
GO
SET FMTONLY OFF;

存储过程是一个预编译的批处理语句块,预编译可改善性能,前一个版本的SQL Server应用关键字(WITH RECOMPILE) 可以强制重新编译存储过程,生成新的执行计划。新版本的SQL Server改善了查询结果的返回信息,可以对存储过程的查询结果,进行别名字义。下面的代码,重新定义存储过程的返回列信息:

EXEC CustOrderDetail ‘2’
WITH RESULT SETS
((ProductName1 varchar(100),Unitprice1 varchar(100),Quantity1 varchar(100),Discount1 varchar(100),ExtendedPrice1 varchar(100))
);

Exec的参数With Results Set可以依据存储过程的实际返回结果,重新定义返回的列名或类型。参考下面的SQL语句:

CREATE PROCEDURE Denali_WithResultSet
AS
BEGIN SELECT 1 as No,’Tsql’ Type, ‘WithResultSet’ AS Feature UNION ALLSELECT 2 as No,’Tsql’ Type, ‘Throw’ AS Feature UNION ALLSELECT 3 as No,’Tsql’ Type, ‘Offset’ AS Feature UNION ALLSELECT 4 as No,’Tsql’ Type, ‘Sequence’ AS Feature
END
GO
EXEC Denali_WithResultSet
WITH RESULT SETS
((      No int,FeatureType varchar(50),FeatureName varchar(50))
) 
 

上面的代码演示了如何运用with result set来修改存储过程的返回列名称。这个特性与第三方的工具集成,比如SSIS任务,报表中会有一定的改善作用。

元数据函数 Metadata Function

新版本的SQL Server增加了几个存储过程用于获取SQL Server 对象的元数据,比如下面的SQL语句:

EXEC sp_describe_first_result_set @tsql=N'SELECT * FROM gbitem'

它会返回表gbitem的每一列的元数据信息,比如列名,是否可空,数据类型,排序等数据信息。

下面的例子演示了如何应用上面提到的函数,返回存储过程的元数据:

CREATE PROC Production.TestProc
AS
SELECT Name, ProductID, Color FROM Production.Product ;
SELECT Name, SafetyStockLevel, SellStartDate FROM Production.Product ;
GOSELECT * FROM sys.dm_exec_describe_first_result_set
('Production.TestProc', NULL, 0) ;

此函数还可以返回多个SQL批处理查询的元数据信息,请参考下面的例子代码

SELECT * FROM sys.dm_exec_describe_first_result_set(
N'SELECT CustomerID, TerritoryID, AccountNumber FROM Sales.Customer WHERE CustomerID = @CustomerID;
SELECT * FROM Sales.SalesOrderHeader;',
N'@CustomerID int', 0) AS a;
GO

如果一个存储过程想返回多笔记录集,在旧版本的SQL Server中,只能获取最后一次返回的记录集。新版本的SQL Server对此作出一些改善,可以指定要返回的记录集。

CREATE PROC TestProc2
AS
SELECT object_id, name FROM sys.objects ;
SELECT name, schema_id, create_date FROM sys.objects ;
GOSELECT * FROM sys.dm_exec_describe_first_result_set_for_object(OBJECT_ID('TestProc2'), 0) ;
SELECT * FROM sys.dm_exec_describe_first_result_set_for_object(OBJECT_ID('TestProc2'), 1) ;
GO

这个特性会给程序处理上带来很多便利,为返回二个结果集而不必定义二个重复的存储过程,而仅仅是返回的结果不同。

SQL 函数 SQL Function

新版本的SQL Server增加了很多函数,请参考园友的文章SQL Server 2012新增的内置函数尝试

这些函数的到来,可以给SQL编程带来便利性。不过,我以为自从SQL Server 2005引入了CLR,实现这些函数都相当容易,直接对.NET BCL一层简单的封装即可,不知道为何过了二个重要的版本后(SQL Server 2008,SQL Server 2008 R2),才加入这些基础函数。

关于SQL Server 2012 T-SQL方面更多的特性,请参考这里:

http://dattatreysindol.com/2012/07/30/sql-server-2012-transact-sql-enhancements-learning-resources/

posted on 2018-08-06 16:03 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/9430771.html

SQL Server 2012 T-SQL 新特性相关推荐

  1. SQL Sever 各版本下载 SQL Server 2012下载SQL Server 2008下载SQL Server 2005 下

    SQL Sever 各版本下载 SQL Server 2012下载SQL Server 2008下载SQL Server 2005 下载SQL Server 2000 下载 SQL Server 20 ...

  2. SQL Server 2019 (15.x) 新特性概要

    2019.11.4 SQL Server 2019发布,趁热打铁了解下2019的新特性.下面整理一些个人感觉重要的或者工作上能用到的新特性,有删减,完整版参考 SQL Server 2019 中的新增 ...

  3. SQL Sever 各版本下载 SQL Server 2012下载SQL Server 2008下载SQL Server 2005 下载SQL Server 2000 下载...

    SQL Server 2016简体中文企业版 文件名:cn_sql_server_2016_enterprise 64位下载地址:ed2k://|file|cn_sql_server_2016_ent ...

  4. SQL Server 2012 随时随地管理数据

    2012年3月7日消息,微软宣布全球应用最广泛的数据平台的最新版,Microsoft SQL Server 2012发布RTM版本(投入量产).SQL Server 2012能够把数据快速转化为切实可 ...

  5. sql数据库服务器端口修改,SQL SERVER 2012更改默认的端口号为1772

    打开开始菜单,找到sqlserver的配置管理器,点击打开 按下图配置右边窗口三项: 按下图配置右边三项: 按下图配置右边三项: 点击下图左边的SQL Server网络配置/MSSQLSERVER的协 ...

  6. sql2008和2012区别_SQL server 2008 和SQL server 2012 的优势

    SQL server 2008 和SQL server 2012 的优势 SQL server 数据库有SQL server 2008.SQL server 2012.SQL server 2014. ...

  7. SharePoint 2010 与 SQL Server 2012 报表服务集成

    一.安装报表服务外接程序 SharePoint产品准备工具可以安装 Reporting Services 外接程序的 SQL Server 2008 R2 版本.SQL Server 2012 包括 ...

  8. SQL Server 2012 Express LocalDB

    微软最新推出的 SQL Server 2012 Express LocalDB 是一种 SQL Server Express 的运行模式,特别适合用在开发环境使用,也内置在 Visual Studio ...

  9. 整合SQL Server 2012和2014

    (For now we are not going to discuss how this can be implemented with SQL Server 2008 or SQL Server ...

  10. SQL Server 2012介绍

    SQL Server 2012介绍 1.SQL Server 2012的新功能 作为SQL Server最新的版本,SQL Server 2012具有以下激动人心的新功能. (1)AlwaysOn. ...

最新文章

  1. Apache的工作原理
  2. 我们正处于新科学革命的起点 | 学界热议AI for Science
  3. 【Java Web前端开发】web概念概述和HTML基础部分
  4. bzoj 2705: [SDOI2012]Longge的问题——欧拉定理
  5. 关于vue打包的问题
  6. 吴思涵国内首场肿瘤ecDNA学术报告|深度揭秘半个世纪ecDNA的研究成果及突破性进展...
  7. kafka专题:kafka的总控制器Controller、消费者重分配策略等核心设计原理详解
  8. Git 存在多个漏洞,开发人员应及时更新
  9. iOS直播集成和问题总结(阿里云直播)
  10. php修改sessiob时间_php中session过期时间设置
  11. (转)利用个人电脑搭建网站WEB服务器域名访问
  12. VirtualBox 扩展win7虚拟硬盘容量
  13. Android Studio|简单记事本开发
  14. Macbook reset PRAM
  15. python excel写入日期变数字_RPA-使用Python读取Excel日期结果为数字时的转换处理方法...
  16. 【运筹帷幄】网站打开慢故障排查思路
  17. python画气泡图_用python 来绘制气泡图的简单技巧
  18. xpath中的position()函数使用
  19. PTA 1107 老鼠爱大米(C++实现)
  20. python agg函数_个人对Pandas中agg、apply和transform函数的理解

热门文章

  1. StyleCop学习笔记——初识StyleCop
  2. linux学习: sudo命令(ubuntu)
  3. 时空旅行+内付费“植物大战僵尸2”下月18日全球同步发行!
  4. stringGrids 部分只读
  5. 剖析Android Traceview效率工具及两种建SDcard方式
  6. 信息林-青岛分类信息网.net源码
  7. 论文写不出来,导师放养,严重焦虑,怎么办?
  8. 情感计算在淘宝UGC的应用
  9. 如何挖掘评论中的关键信息
  10. 【GNN】一文轻松了解Graph Neural Networks