MSSQL 2016 - 2019,新功能

目录

我最近才开始接触SQL Server 2019,从2014版本到2019它新增了很多功能,但我暂时都用不上,这里主要从一个传统的数据库开发者角度去记录一些对我有用的功能。

语法层面

DROP <object_type> IF EXISTS

drop某个object时再也不用事先写一句SQL去判断是否存在了,比如创建临时表一般要先判断是否存在,2014版本时要这样写:

IF object_id('tempdb..#tmp_table') IS NOT NULL
	DROP TABLE #test_table

2016版本开始可以简化语法:

DROP TABLE IF EXISTS #tmp_table

类似的还有drop view/function/column/constraint等等也支持:

ALTER TABLE table_a DROP column if exists col_a
ALTER TABLE table_a DROP constraint if exists cons_a

CREATE OR ALTER <object_type>

支持和ORACLE相似的语法,存在就更新,不存在就新建,创建和更新PROC/VIEW/FUNCTION等时很方便:

CREATE OR ALTER PROC dbo.sp_test_proc
AS
BEGIN
	....
END

SELECT INTO ON <file_group>

支持将select into新建的表创建在指定的file group上,而不总是默认的primary file group

函数

主要增加了如下我认为比较有用的内置函数:

  • concat_ws - 连接多个字符串时,加上分隔符
  • string_split - 字符串拆分
  • string_agg - 列值合并为字符串
  • format - 返回格式化之后的字符串,支持.NET format string
  • formatmessage -将C语言printf风格的字符串占位符替换为后续的参数 ( 长字符串慎用,仅支持2047个字符 )
  • translate - 按顺序将字符串1中出现的字符替换为字符串2中的字符,简化某些情况下的replace写法
  • iif - case when 语法糖
  • trim - 不用再ltrim((rtrim()))了

其它

  • SQL Graph功能,将多对多关系储存为图,即结点和边,在某些场景下可以简化后续的查询,查看更多说明
  • JSON支持
  • Query Store,主要对DBA有用
  • Temporal tables, 自动存储数据的历史版本
  • Language extension,从MSSQL执行python/R/java等语言
  • Resumable online index rebuild, 断点续Create Index
  • 数据库层面的行级别数据权限

文档:What’s new in SQL Server 2019 (15.x)