В этой статье я коротко расскажу о наиболее значительных изменениях, внесенных в T-SQL разработчиками версии SQL Server 2016.

Ядро системы SQL Server 2016 — это процессор реляционной базы данных и язык программирования T-SQL. Последний используется как для управления SQL Server, так и для разработки хранимых процедур, триггеров, функций и приложений. Как и следовало ожидать, при подготовке новой редакции SQL Server 2016 специалисты Microsoft внесли в реализованную в этом пакете версию T-SQL множество усовершенствований. Познакомимся с некоторыми из них.

DROP IF EXISTS

Одно из наиболее полезных усовершенствований реализованной в SQL Server 2016 версии языка T-SQL — новая инструкция DROP IF EXITS. Она дает возможность проверить, существует ли тот или ной объект, прежде чем приступать к его удалению, — причем без использования всех этих блоков IF EXISTS, которые мы все применяем в сценариях T-SQL. Инструкция представлена в приведенном ниже примере:

DROP TABLE IF EXISTS [dbo]. [MyTable];

Функция STRING_SPLIT

STRING_SPLIT — еще одна удобная новая функция, облегчающая синтаксический разбор строк на основе разделителя. Строка может состоять из данных типов varchar, nvarchar, char или nchar.

nvarchar, char или nchar.
DECLARE @string varchar (100) =
   'Richard, Mike, Mark'
SELECT value FROM string_split (@string, ',')

Использование инструкции TRUNCATE TABLE в таблицах с разделами

В системе SQL Server 2016 инструкция TRUNCATE TABLE позволяет усекать те или иные разделы, что в ряде случаев упрощает обслуживание объемных таблиц, состоящих из нескольких разделов. При использовании этой инструкции результат достигается быстрее, чем при удалении строк из разделов с помощью инструкции DELETE. Усовершенствованная инструкция TRANCATE TABLE приведена ниже.

TRUNCATE TABLE dbo.myTable WITH
   (PARTITIONS (1, 6 TO 8));

Предложение FOR SYSTEM_TIME было включено для обеспечения совместимости с новой функцией «временные таблицы» (temporal tables). Эти таблицы в автоматическом режиме отслеживают историю таблицы. А новые предложения были добавлены для того, чтобы формировать запросы к истории временной таблицы. Следующий пример показывает, как используется новое предложение FOR SYSTEM_TIME.

SELECT * FROM Employee FOR
   SYSTEM_TIME
        BETWEEN '2014-01-01
        00:00:00.0000000' AND
        '2015-01-01 00:00:00.0000000'
WHERE EmployeeID = 1000 ORDER
   BY ValidFrom;
FOR JSON Clause

Подобным же образом предложение FOR JSON было включено для того, чтобы оператор мог преобразовывать табличные данные в формат JSON. В отличие от языка XML, располагающего собственным типом данных, новые средства работы с форматом JSON активируются с использованием типа данных NVARCHAR. Пример использования нового предложения FOR JSON приведен ниже:

SELECT object_id, name FROM
   sys.tables FOR JSON PATH

Функции JSON

  • ISJSON — функция ISJSON проверяет, содержит ли та или иная строка допустимый формат JSON.
  • JSON_VALUE — функция JSON_VALUE извлекает скалярное значение из строки JSON.
  • JSON_QUERY — функция JSON_QUERY извлекает из строки JSON объект или массив.
  • JSON_MODIFY — функция JSON_MODIFY обновляет значение свойства в строке JSON и возвращает обновленную строку JSON.

Функция OPENJON

Функция табличных значений, table-value function (TVF) OPENJSON, направляет запрос к тексту JSON и может обнаружить массив объектов JSON либо перебрать все элементы массива и сформировать из полученных результатов набор строк. Пример использования функции OPENJSON приведен ниже:

DECLARE @JSON NVARCHAR (100)
SET @json = N’ [null, "string",
   1, [true, false], ["a","b","c"],
   {"obj1":"obj2"}]’;
SELECT * FROM OPENJSON (@json)

Функция FORMATMESSAGE

Функция FORMATMESSAGE тоже была усовершенствована, теперь она дает оператору возможность подставлять собственные строковые значения. В предыдущей версии сообщения составлялись из строк, обнаруженных в sys-сообщениях. Следующий пример иллюстрирует новые возможности функции FOMRMESSAGE.

SELECT FORMATMESSAGE ('This is
   the%s and this is the%s.',
   'variable1', 'variable2') AS Result;

Хранимая процедура sp_execute_external_script для выполнения сценариев R

Для обеспечения активации средств поддержки R в SQL Server 2016 специалисты Microsoft добавили хранимую процедуру sp_Execute_externl_script, которая дает возможность запускать сценарии R из среды T-SQL в системе SQL Server. Простой пример выполнения R из T-SQL приводится в следующем листинге:

EXEC sp_execute_external_script
   @language =N'R',
@script=N'OutputDataSet<-InputDataSet',
@input_data_1 =N'select 1 as hello'
WITH RESULT SETS (([hello] INT not null));
GO