由于工作的原因,最近开始部署SQL Server 2017。今天就谈谈SQL Server 2017相对于SQL Server 2016的两个更新点——因为SQL Server 2017更新的内容太多,只说一下我在工作上用的到部分。
(1) STRING_AGG串联字符串函数
这个函数可以说是“千呼万唤始出来”!以前要用类似的功能,只能自己写扩展函数。原生的函数,在效率上可能更高。
https://docs.microsoft.com/zh-cn/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-2017
语法:
STRING_AGG ( expression, separator ) [ <order_clause> ] <order_clause> ::= WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] )
示例:
SELECT STRING_AGG (FirstName, ',') AS Name FROM Person.Person GROUP BY FirstName;
结果:
Syed,Catherine,Kim,Hazem,...
(2) COLUMNSTORE INDEX列存储索引支持max长度
SQL Server 2017的聚集列存储索引,开始支持nvarchar(max),varchar(max),varbinary(max)的数据类型。
https://docs.microsoft.com/zh-cn/sql/t-sql/statements/create-columnstore-index-transact-sql?view=sql-server-2017
由于SQL Server从2016才开始支持JSON格式,通常用nvarchar(max)的类型保存。我们会不定期的把历史数据从主表,移动到存档表里面,创建列存储索引,以保证主表的查询效率。但是在SQL Server2016不支持nvarchar(max)的数据类型,就要手工写代码把超长的nvarchar(max)字段拆分成多个nvarchar(4000)字段。无形当中,就增加了维护的难度。
SQL Server 2017的列存储索引,又为我们的运维提供了不少的方便!
以上就是我目前用到的SQL Server 2017两点更新。