В этой статье я коротко расскажу о наиболее значительных изменениях, внесенных в 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