探索SQL Server 2016 T-SQL 特性中的新增功能

日期: 2016-05-19 作者:Ashish Kumar Mehta翻译:杨宏玉 来源:TechTarget中国 英文

数据库专家Ashish Kumar Mehta分享了SQL Server 2016在T – SQL特性上的一些改进。其中包括DROP IF EXISTS选项和MAXDOP for DBCC CHECKDB。 目前在SQL Server 2016的预览版本中,引入了许多新特性,包括transact – SQL(t – SQL)特性上的多种提升,T-SQL是微软对标准SQL编程语言的扩展。在SQL Server 2016正式发布之前,想要进行升级的数据库管理员和开发人员应该熟悉T – SQL新的选项。

本文将探讨新版SQL Server的一些主要的tr……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

数据库专家Ashish Kumar Mehta分享了SQL Server 2016在T - SQL特性上的一些改进。其中包括DROP IF EXISTS选项和MAXDOP for DBCC CHECKDB。

目前在SQL Server 2016的预览版本中,引入了许多新特性,包括transact - SQL(t - SQL)特性上的多种提升,T-SQL是微软对标准SQL编程语言的扩展。在SQL Server 2016正式发布之前,想要进行升级的数据库管理员和开发人员应该熟悉T - SQL新的选项。本文将探讨新版SQL Server的一些主要的transact - SQL改进。比如引入MAXDOP DBCC CHECKDB,以及如何使用它们来改善你的数据库。

TRUNCATE TABLE WITH PARTITION

TRUNCATE TABLE 是删除一个表中全部数据最快的方法。与DELETE语句相比,其主要优势在于它仅需要很小的事务日志,且对系统其他关键资源影响较小。

当使用SQL Server 2016 T - SQL新增的TRUNCATE TABLE WITH PARTITION语句时,您可以删除一个表的特定分区。表分区特性最初由SQL Server 2008引入,但直到SQL Server2016出现之前,并没有支持删除单个表分区的操作。

要使用这些新增的语句,你可以参照下面的T - SQL语法:

TRUNCATE TABLE语法

例如:

TRUNCATE TABLE示例

在SQL Server 2016中使用TRUNCATE TABLE WITH PARTITION之前,你需要确保所有分区表索引的一致性。否则,你将无法成功地删除分区。

DROP IF EXISTS 功能

SQL Server 2016还为DROP语句新增了一个DROP IF EXISTS语法选项。在删除一个数据库对象前,它可以被用来检查一个对象是否存在。这个针对T-SQL的改进适用于多种类型的对象,例如表、索引、列、模式、存储过程、触发器和用户定义函数。

在之前版本的SQL Server中,在删除一个表之前,想要知道这个表是否存在,你编写一个类似如下的T- SQL脚本来进行检查:

 IF EXISTS语法

但从SQL2016中,你只需要使用如下语句就能实现相同的操作:

 IF EXISTS 语法

ALTER TABLE WITH (ONLINE = ON | OFF)选项

SQL Server 2016引入了ALTER TABLE WITH (ONLINE = ON | OFF)选项,这个选项被认为是目前所急需的。这项针对T-SQL的改进允许你在终端用户保持连接的情况下,更改数据表的各种属性,如数据类型、列长度、排序、是否可为NULL或其他变量。默认情况下,这个功能是关闭的。如果你想使用它,您需要指定ALTER TABLE(ONLINE=ON),T - SQL代码如下:

ALTER TABLE WITH语法

MAXDOP for DBCC CHECKDB, CHECKTABLE and CHECKFILEGROUP

SQL Server 2016,新增了MAXDOP(最大程度并行性)服务器配置选项,该选项主要应用于T-SQL的 DBCC CHECKDB,DBCC CHECKTABLE 和DBCC CHECKFILEGROUP 命令。它将帮助数据库管理员(DBA)控制数据库服务器可以被用来执行查询的最大处理器数量。不过,如果MAXDOP被设置为零,SQL Server将选择SP_CONFIGURE的配置值作为最大并行度。

请使用如下语句来使用MAXDOP选项:

DBCC CHECKTABLE 和DBCC CHECKFILEGROUP 命令

AUTOGROW_SINGLE_FILE 和AUTOGROW_ALL_FILES

SQL Server 2016引入了两个新的选项,用于使用ALTER DATABASE命令修改数据库文件,这两个选项分别是:AUTOGROW_SINGLE_FILE 和AUTOGROW_ALL_FILES。他们取代了跟踪标志1117。1117是一个开关类的设置,在早期版本中,当数据文件容量增长时,它被用来保持文件组中数据文件大小的一致性。使用跟踪标志的缺点是,只要某个文件被定义为数据库中某个文件组的一部分。它就会自动增加SQL Server实例中所有数据库中对应文件的大小。

在SQL Server 2016中,AUTOGROW_SINGLE_FILE是创建数据库时的默认设置。这个选项被使用时,当文件组中的数据或日志文件达到DBA设定的自动增长阈值时,只有特定文件继续保持自增长,其余的文件则保持其之前的大小。

另一方面,如果你让文件组中所有数据或日志文件文件在达到增长阈值时继续增长,你可以使用AUTOGROW_ALL_FILES选项,它允许你将更改限定在一个特定实例的数据库。使用此选项时,建议您将文件增长的步长设定在固定大小(例如,兆字节或字节),避免使用增长百分比,这样能够减轻T - SQL语句失败的风险。因为使用增长百分比来定义时,如果当前文件已经很大,那么T-SQL语句执行失败的风险就很高。注意,在SQL Server 2016中,数据和日志文件的初始默认大小是8 MB,而默认auto-grow大小是每个文件64 MB 。

COMPRESS 和 DECOMPRESS 操作

SQL Server 2016的T - SQL 还新增了两个内建功能,用于对数据进行压缩和解压。这相对于SQL Server 2014来说,压缩粒度更小。COMPRESS 功能可以通过GZIP文件压缩算法来压缩输入语句,生成VARBINARY(MAX)字节数组。解压缩允许DBA和开发人员使用GZIP算法来解压二进制数据。不过,为了得到解压后的实际数据,你需要使用T- SQL的CAST 命令,以一个特定的目标类型来对结果进行表示。执行下面的T - SQL脚本,可以查看COMPRESS 和DECOMPRESS 功能的结果。

COMPRESS 和 DECOMPRESS 操作

STRING_SPLIT和STRING_ESCAPE功能

此外,SQL Server 2016包括两个新的字符串函数,STRING_SPLIT 和STRING_ESCAPE。

使用STRING_SPLIT,你可以通过指定分隔符,分隔T-SQL的字符表达式到一个单列表中,用法如下:

STRING_SPLIT和STRING_ESCAPE功能

例如:

STRING_SPLIT和STRING_ESCAPE示例

STRING_ESCAPE允许你将那些在T-SQL容易导致错误消息的特殊字符转译为可以理解的代码。最初,该函数只能用来规避一组JSON特殊字符,包括引号和退格,返回和制表命令。你可以参照如下的语法来使用STRING_ESCAPE:

STRING_ESCAPE语法

千万不要被这些T - SQL改进冲昏了头。每一个新版本的SQL Server都会附带一些激动人心的新功能,但这并不意味着你就应该直接自动升级。在你升级到SQL Server 2016以前,你首先要评估T - SQL的新功能,此外还要评估新版本SQL Server提供的其他新功能,以决定哪个版本的SQL Server对你的企业来说,性价比最高。

作者

Ashish Kumar Mehta
Ashish Kumar Mehta

数据库管理器等相关领域资深作者。在数据库管理、性能调优、数据库开发和Microsoft SQL Server等技术培训方面有超过十年的丰富经验。

翻译

杨宏玉
杨宏玉

TechTarget特邀编辑。北京邮电大学计算机科学与技术专业硕士。熟悉软件开发流程,对系统管理,网络配置,数据库应用等方面有深入的理解和实践经验。现就职于IBM(中国)投资有限公司,从事IBM服务器相关软件的开发工作。业余时间喜欢游泳登山,爱健身,喜欢结交朋友。

相关推荐