Sql оператор in: Оператор SQL IN: примеры, синтаксис

Обобщённое табличное выражение, оператор WITH

Обобщённое табличное выражение или CTE (Common Table Expressions) — это временный результирующий набор данных, к которому можно обращаться в последующих запросах.
Для написания обобщённого табличного выражения используется оператор WITH.

-- Пример использования конструкции WITH
WITH Aeroflot_trips AS
    (SELECT TRIP.* FROM Company
        INNER JOIN Trip ON Trip.company = Company.id WHERE name = "Aeroflot")
SELECT plane, COUNT(plane) AS amount FROM Aeroflot_trips GROUP BY plane;

Выражение с WITH считается «временным», потому что результат не сохраняется где-либо на постоянной основе
в схеме базы данных, а действует как временное представление, которое существует только на время выполнения запроса,
то есть оно доступно только во время выполнения операторов SELECT, INSERT, UPDATE, DELETE или MERGE.
Оно действительно только в том запросе, которому он принадлежит, что позволяет улучшить структуру запроса, не загрязняя глобальное пространство имён.

WITH название_cte [(столбец_1 [, столбец_2 ] …)] AS (подзапрос)
    [, название_cte [(столбец_1 [, столбец_2 ] …)] AS (подзапрос)] …

Порядок использования оператора WITH:

  1. Ввести оператор WITH
  2. Указать название обобщённого табличного выражения
  3. Опционально: определить названия для столбцов получившегося табличного выражения, разделённых знаком запятой
  4. Ввести AS и далее подзапрос, результат которого можно будет использовать в других частях SQL запроса, используя имя, определённое на 2 этапе
  5. Опционально: если необходимо более одного табличного выражения, то ставится запятая и повторяются шаги 2-4
  1. Создаём табличное выражение Aeroflot_trips, содержащие все полёты, совершенные авиакомпанией «Aeroflot»
WITH Aeroflot_trips AS
    (SELECT plane, town_from, town_to FROM Company
        INNER JOIN Trip ON Trip.company = Company.id WHERE name = "Aeroflot")
SELECT * FROM Aeroflot_trips;

planetown_fromtown_to
IL-86MoscowRostov
IL-86RostovMoscow
  1. Аналогично, создаём табличное выражение Aeroflot_trips, но с переименованными колонками
WITH Aeroflot_trips (aeroflot_plane, town_from, town_to) AS
    (SELECT plane, town_from, town_to FROM Company
        INNER JOIN Trip ON Trip. company = Company.id WHERE name = "Aeroflot")
SELECT * FROM Aeroflot_trips;

aeroflot_planetown_fromtown_to
IL-86MoscowRostov
IL-86RostovMoscow
  1. С помощью оператора WITH определяем несколько табличных выражений
WITH Aeroflot_trips AS
    (SELECT TRIP.* FROM Company
        INNER JOIN Trip ON Trip.company = Company.id WHERE name = "Aeroflot"),
    Don_avia_trips AS
    (SELECT TRIP.* FROM Company
        INNER JOIN Trip ON Trip.company = Company.id WHERE name = "Don_avia")
SELECT * FROM Don_avia_trips UNION SELECT * FROM  Aeroflot_trips;

idcompanyplanetown_fromtown_totime_outtime_in
11811TU-134RostovMoscow1900-01-01T06:12:00. 000Z1900-01-01T08:01:00.000Z
11821TU-134MoscowRostov1900-01-01T12:35:00.000Z1900-01-01T14:30:00.000Z
11871TU-134RostovMoscow1900-01-01T15:42:00.000Z1900-01-01T17:39:00.000Z
11881TU-134MoscowRostov1900-01-01T22:50:00.000Z1900-01-02T00:48:00.000Z
11951TU-154RostovMoscow1900-01-01T23:30:00.000Z1900-01-02T01:11:00.000Z
11961TU-154MoscowRostov1900-01-01T04:00:00.000Z1900-01-01T05:45:00.000Z
11452IL-86MoscowRostov1900-01-01T09:35:00.000Z1900-01-01T11:23:00.000Z
11462IL-86RostovMoscow1900-01-01T17:55:00.000Z1900-01-01T20:01:00. 000Z

Обобщённые табличные выражения были добавлены в SQL для упрощения сложных длинных запросов, особенно с множественными подзапросами. Их главная задача – улучшение читабельности,
простоты написания запросов и их дальнейшей поддержки. Это происходит за счёт сокрытия больших и сложных запросов в созданные именованные выражения, которые потом используются в основном запросе.

Руководство по SQL. Операторы. – PROSELYTE

Оператор – это зарезервированное слово, или символ, который используется в SQL выражениях с использованием WHERE для выполнения операции или операций, например, сравнение.

Операторы используется для описания условий в SQL выражении и для обслуживания группы SQL выражений.

В языке структурированных запросов SQL существует четыре типа операторов:

  • Арифметические операторы
  • Операторы сравнения
  • Логические операторы
  • Операторы, которые отрабатывают, если условие не выполняется.

Арифметические операторы

Предположим, что A = 100 и B = 200

Ссылка на примеры

ОператорОписаниеПример
+Сложение – добавляет значение с другой стороны оператораA + B = 300
Вычитание – отнимает значение справа от значения слева от оператораA + B = -100
*Умножение – умножает значения по обе стороны от оператораA * B = 20000
/Деление – делит левое значение на правое значение от оператораB / A = 2
%Остаток от деления – делит левое значение на правое от оператора и возвращает остаток от деления.B % A = 0

Операторы сравнения

Предположим, что A = 100 и B = 200

Ссылка на примеры

ОператорОписаниеПример
=Проверяет, равны ли значения слева и справа от оператора. Если да – возвращает true, если нет – false(A = B) – false
!=Проверяет, равны ли значения слева и справа от оператора. Если да – возвращает false, если нет – true(A != B) – true
<>Проверяет, равны ли значения слева и справа от оператора. Если да – возвращает false, если нет – true(A <> B) – true.
>Проверяет, больше ли значение слева, чем значение справа от оператора. Если да – возвращает true, если нет – false(A > B) – false
<Проверяет, меньше ли значение слева, чем значение справа от оператора. Если да – возвращает true, если нет – false(A < B) – true
>=Проверяет, больше ли или равно значение слева, чем значение справа от оператора. Если да – возвращает true, если нет – false(A >= B) – false
<=Проверяет, меньше ли или равно значение слева, чем значение справа от оператора. Если да – возвращает true, если нет – false(A <= B) – true
!<Проверяет, чтобы значение слева было не меньше, чем значение справа от оператора. Если да – возвращает true, если нет – false.(A !< B) – false
!>Проверяет, чтобы значение слева было не больше, чем значение справа от оператора. Если да – возвращает true, если нет – false.(A !> B) – true

Логические операторы

Ссылка на примеры

ОператорОписание
ALLИспользуется для сравнения значения со всеми значениями в другом множестве значений.
ANDРазрешает существование нескольких условий в условии WHERE выражения SQL.
ANYСравнивает значение с любым применимым значением в списке в соответствии с условием.
BETWEENИщет значения в указанном диапазоне.
EXISTSИщет запись в таблице, которая соответствует заданным критериям.
INСравнивает значение в списке определённых буквенных значений.
LIKEСравнивает значение, которое похоже на определённый шаблон.
NOTДелает логический оператор противоположным. Например, NOT IN, NOT EXISTS и т.д.
ORКомбинирует несколько условий в SQL выражении.
IS NULLСравнивает значение с NULL.
UNIQUEПроверяет каждую запись в таблице на уникальность.

На этом мы заканчиваем изучение операторов языка структурированных запросов SQL.
В следующей статье мы рассмотрим выражения (expressions) в языке SQL.

операторов Transact-SQL — SQL Server

Редактировать

Твиттер

LinkedIn

Фейсбук

Электронная почта

  • Статья
  • 2 минуты на чтение

Применяется к: SQL Server Azure SQL База данных Azure SQL Управляемый экземпляр Azure Synapse Analytics Analytics Platform System (PDW)

Оператор SQL — это атомарная единица работы, которая либо полностью завершается успешно, либо полностью завершается ошибкой. Оператор SQL — это набор инструкций, состоящий из идентификаторов, параметров, переменных, имен, типов данных и зарезервированных слов SQL, который успешно компилируется. Службы Analysis Services создают неявную транзакцию для инструкции SQL, если в команде BeginTransaction не указано начало транзакции. Службы Analysis Services всегда фиксируют неявную транзакцию в случае успешного выполнения инструкции и откатывают неявную транзакцию в случае сбоя команды.

Существует множество типов операторов. Возможно, самым важным является SELECT, который извлекает строки из базы данных и позволяет выбирать одну или несколько строк или столбцов из одной или нескольких таблиц в SQL Server. В этой статье перечислены категории инструкций для использования с Transact-SQL (T-SQL) в дополнение к инструкции SELECT . Вы можете найти все утверждения, перечисленные в левой части навигации.

Резервное копирование и восстановление

Операторы резервного копирования и восстановления предоставляют способы создания резервных копий и восстановления из резервных копий. Дополнительные сведения см. в разделе Обзор резервного копирования и восстановления.

Язык определения данных

Операторы языка определения данных (DDL) определяют структуры данных. Используйте эти операторы для создания, изменения или удаления структур данных в базе данных. Эти заявления включают:

  • ALTER
  • Сопоставления
  • СОЗДАТЬ
  • СБРОС
  • ОТКЛЮЧИТЬ ТРИГГЕР
  • ВКЛЮЧИТЬ ТРИГГЕР
  • ПЕРЕИМЕНОВАТЬ
  • ОБНОВЛЕНИЕ СТАТИСТИКИ
  • ТАБЛИЦА ОБРЕЗАНИЯ

Язык обработки данных

Язык манипулирования данными (DML) влияет на информацию, хранящуюся в базе данных. Используйте эти операторы для вставки, обновления и изменения строк в базе данных.

  • ВКЛАДЫШ
  • УДАЛИТЬ
  • ВСТАВКА
  • ВЫБЕРИТЕ
  • ОБНОВЛЕНИЕ
  • ОБЪЕДИНЕНИЕ

Операторы разрешений определяют, какие пользователи и логины могут получать доступ к данным и выполнять операции. Дополнительные сведения об аутентификации и доступе см. в Центре безопасности.

Service Broker — это функция, обеспечивающая встроенную поддержку приложений для обмена сообщениями и очередей. Дополнительные сведения см. в разделе Service Broker.

Параметры сеанса

Операторы SET определяют, как текущий сеанс обрабатывает параметры времени выполнения. Обзор см. в разделе операторы SET.

Предложение FOR (Transact-SQL) — SQL Server

  • Статья
  • 10 минут на чтение

Применяется к: SQL Server База данных SQL Azure Azure SQL Управляемый экземпляр

Используйте предложение FOR, чтобы указать один из следующих параметров для результатов запроса.

  • Разрешить обновления при просмотре результатов запроса в режиме просмотра курсора, указав FOR BROWSE .

  • Отформатируйте результаты запроса как XML, указав FOR XML .

  • Отформатируйте результаты запроса как JSON, указав FOR JSON .

Соглашения о синтаксисе Transact-SQL

Синтаксис

 [ FOR { BROWSE |  | }]
  
 ::=
XML
{
    { RAW [( 'ИмяЭлемента') ] | АВТО }
    [
        <КоммондирективесфорXML>
        [ , {XMLDATA | XMLSCHEMA [('TargetNameSpaceURI') ] } ]
        [ , ЭЛЕМЕНТЫ [ XSINIL | ОТСУТСТВУЮЩИЙ ]
    ]
  | ЯВНЫЙ
    [
        <КоммондирективесфорXML>
        [ , XMLДАННЫЕ ]
    ]
  | ПУТЬ [( 'ИмяЭлемента') ]
    [
        <КоммондирективесфорXML>
        [ , ЭЛЕМЕНТЫ [ XSINIL | ОТСУТСТВУЮЩИЙ ] ]
    ]
}
  
 ::=
[ , ДВОИЧНЫЙ BASE64 ]
[ , ТИП ]
[ , КОРЕНЬ [ ( 'Имя корня' ) ] ]
  
 ::=
JSON
{
    { АВТО | ПУТЬ }
    [
        [ , КОРЕНЬ [ ( 'Имя корня' ) ] ]
        [ INCLUDE_NULL_VALUES]
        [ , БЕЗ_МАССИВА_Обертки ]
    ]
  
}
 

FOR BROWSE

BROWSE
Указывает, что обновления разрешены при просмотре данных в курсоре режима просмотра DB-Library. Таблицу можно просматривать в приложении, если она содержит столбец с отметкой времени , таблица имеет уникальный индекс и параметр FOR BROWSE находится в конце инструкции SELECT, отправляемой экземпляру SQL Server.

Примечание

Вы не можете использовать HOLDLOCK в операторе SELECT, который включает параметр FOR BROWSE.

FOR BROWSE не может использоваться в инструкциях SELECT, которые соединяются оператором UNION.

Примечание

Если столбцы ключей уникального индекса таблицы допускают значение NULL, а таблица находится на внутренней стороне внешнего соединения, индекс не поддерживается в режиме просмотра.

Режим просмотра позволяет сканировать строки в таблице SQL Server и обновлять данные в таблице по одной строке за раз. Чтобы получить доступ к таблице SQL Server в вашем приложении в режиме просмотра, вы должны использовать один из следующих двух вариантов:

  • Оператор SELECT, который вы используете для доступа к данным из таблицы SQL Server, должен заканчиваться ключевыми словами FOR BROWSE . При включении параметра FOR BROWSE для использования режима просмотра создаются временные таблицы.

  • Чтобы включить режим просмотра с помощью параметра NO_BROWSETABLE , необходимо выполнить следующую инструкцию Transact-SQL:

     УСТАНОВИТЬ NO_BROWSETABLE ВКЛ.
     

    При включении NO_BROWSETABLE , все операторы SELECT ведут себя так, как если бы к операторам был добавлен параметр FOR BROWSE . Однако параметр NO_BROWSETABLE не создает временные таблицы, которые обычно используются параметром FOR BROWSE для отправки результатов вашему приложению.

При попытке доступа к данным из таблиц SQL Server в режиме просмотра с помощью запроса SELECT, включающего оператор внешнего соединения, и когда для таблицы определен уникальный индекс, присутствующий на внутренней стороне оператора внешнего соединения. , режим просмотра не поддерживает уникальный индекс. Режим просмотра поддерживает уникальный индекс только в том случае, если все ключевые столбцы уникального индекса могут принимать нулевые значения. Режим просмотра не поддерживает уникальный индекс, если выполняются следующие условия:

  • Вы пытаетесь получить доступ к данным из таблиц SQL Server в режиме просмотра с помощью запроса SELECT, который включает оператор внешнего соединения.

  • Уникальный индекс определен для таблицы, представленной на внутренней стороне оператора внешнего соединения.

Чтобы воспроизвести это поведение в режиме просмотра, выполните следующие действия:

  1. В SQL Server Management Studio создайте базу данных с именем SampleDB.

  2. В базе данных SampleDB создайте таблицу tleft и таблицу tright, каждая из которых содержит один столбец с именем c1. Определите уникальный индекс для столбца c1 в таблице tleft и настройте столбец так, чтобы он принимал нулевые значения. Для этого выполните следующие операторы Transact-SQL в соответствующем окне запроса:

     CREATE TABLE tleft(c1 INT NULL UNIQUE) ;
    ИДТИ
    СОЗДАТЬ ТАБЛИЦУ tright(c1 INT NULL) ;
    ИДТИ
     
  3. Вставьте несколько значений в левую и правую таблицы. Убедитесь, что вы вставили нулевое значение в таблицу tleft. Для этого выполните следующие инструкции Transact-SQL в окне запроса:

    .

     ВСТАВИТЬ В tleft VALUES(2) ;
    ВСТАВИТЬ В tleft VALUES(NULL) ;
    ВСТАВИТЬ В правильные ЗНАЧЕНИЯ(1) ;
    ВСТАВИТЬ В правильные ЗНАЧЕНИЯ(3) ;
    ВСТАВИТЬ В ПРАВИЛЬНЫЕ ЗНАЧЕНИЯ (НУЛЬ) ;
    ИДТИ
     
  4. Включите параметр NO_BROWSETABLE . Для этого выполните следующие инструкции Transact-SQL в окне запроса:

    .

     УСТАНОВИТЬ NO_BROWSETABLE ВКЛ ;
    ИДТИ
     
  5. Получите доступ к данным в таблице tleft и таблице tright с помощью оператора внешнего соединения в запросе SELECT. Убедитесь, что таблица tleft находится на внутренней стороне оператора внешнего соединения. Для этого выполните следующие инструкции Transact-SQL в окне запроса:

    .

     ВЫБРАТЬ tleft.c1
    Слева
    ПРИСОЕДИНЯЙСЯ
    ON tлевый.c1 = правый.c1
    ГДЕ tright.c1 <> 2 ;
     

    Обратите внимание на следующий вывод в области результатов:

    с1

    —-

    НУЛЕВОЙ

    НУЛЕВОЙ

После выполнения запроса SELECT для доступа к таблицам в режиме просмотра результирующий набор запроса SELECT содержит два нулевых значения для столбца c1 в таблице tleft из-за определения правой инструкции внешнего соединения. Таким образом, в результирующем наборе нельзя различить нулевые значения, полученные из таблицы, и нулевые значения, введенные правым оператором внешнего соединения. Вы можете получить неправильные результаты, если вам придется игнорировать пустые значения из набора результатов.

Примечание

Если столбцы, включенные в уникальный индекс, не принимают значения NULL, все значения NULL в результирующем наборе были введены правым оператором внешнего соединения.

FOR XML

XML
Указывает, что результаты запроса должны быть возвращены в виде XML-документа. Должен быть указан один из следующих режимов XML: RAW, AUTO, EXPLICIT. Дополнительные сведения о XML-данных и SQL Server см. в разделе FOR XML (SQL Server).

СЫРЬЕ [ (‘ ElementName ‘) ]
Берет результат запроса и преобразует каждую строку в результирующем наборе в элемент XML с общим идентификатором в качестве тега элемента. При желании вы можете указать имя для элемента строки. Результирующий вывод XML использует указанное ElementName в качестве элемента строки, созданного для каждой строки. Дополнительные сведения см. в разделе Использование режима RAW с FOR XML.

AUTO
Возвращает результаты запроса в виде простого вложенного XML-дерева. Каждая таблица в предложении FROM, для которой хотя бы один столбец указан в предложении SELECT, представлена ​​как элемент XML. Столбцы, перечисленные в предложении SELECT, сопоставляются с соответствующими атрибутами элемента. Дополнительные сведения см. в разделе Использование режима AUTO с FOR XML.

EXPLICIT
Указывает, что форма результирующего XML-дерева определяется явно. При использовании этого режима запросы должны быть написаны особым образом, чтобы дополнительная информация о желаемой вложенности указывалась явно. Дополнительные сведения см. в разделе Использование режима EXPLICIT с FOR XML.

XMLDATA
Возвращает встроенную схему XDR, но не добавляет к результату корневой элемент. Если XMLDATA указан, к документу добавляется схема XDR.

Важно

Директива XMLDATA устарела . Используйте генерацию XSD в случае режимов RAW и AUTO. Нет замены директиве XMLDATA в режиме EXPLICIT. Эта функция будет удалена в будущей версии Microsoft SQL Server. Избегайте использования этой функции в новых разработках и планируйте модифицировать приложения, которые в настоящее время используют эту функцию.

Подавление нежелательных разрывов строк: Вы можете использовать SQL Server Management Studio (SSMS) для создания запроса, использующего предложение FOR XML. Иногда большое количество XML возвращается и отображается в одной ячейке сетки. Строка XML может быть длиннее, чем одна ячейка сетки SSMS может содержать одну строку. В этих случаях SSMS может вставлять символы разрыва строки между длинными сегментами всей строки XML. Такие разрывы строк могут возникать в середине подстроки, которую не следует разбивать на строки. Вы можете предотвратить разрывы строк, используя приведение AS XMLDATA. Это решение также может применяться при использовании FOR JSON PATH. Этот метод обсуждается в Stack Overflow и показан в следующем образце оператора SELECT Transact-SQL:

  • Использование SQL Server FOR XML: преобразование типа данных результата в текст/varchar/строку?

     ВЫБЕРИТЕ ПРИВОД(
        (ВЫБЕРИТЕ столбец1, столбец2
            ИЗ my_table
            ДЛЯ ПУТИ XML('')
        )
            КАК ВАРЧАР(МАКС)
    ) КАК XMLDATA ;
     

XMLSCHEMA [ (‘ TargetNameSpaceURI ‘) ]
Возвращает встроенную схему XSD. Вы можете дополнительно указать URI целевого пространства имен при указании этой директивы, которая возвращает указанное пространство имен в схеме. Дополнительные сведения см. в разделе Создание встроенной схемы XSD.

ELEMENTS
Указывает, что столбцы возвращаются как подэлементы. В противном случае они сопоставляются с атрибутами XML. Этот параметр поддерживается только в режимах RAW, AUTO и PATH. Дополнительные сведения см. в разделе Использование режима RAW с FOR XML.

XSINIL
Указывает, что для значений столбца NULL должен быть создан элемент с атрибутом xsi:nil , для которого установлено значение True . Эта опция может быть указана только с директивой ELEMENTS. Для получения дополнительной информации см.:

  • Создание элементов для значений NULL с параметром XSINIL.
  • FOR XML в операторе SELECT

ОТСУТСТВУЕТ
Указывает, что для пустых значений столбца соответствующие элементы XML не будут добавлены в результат XML. Укажите этот параметр только с ELEMENTS.

PATH [ (‘ ElementName ‘) ]
Создает оболочку элемента для каждой строки в результирующем наборе. Вы можете дополнительно указать имя элемента для оболочки элемента . Если указана пустая строка, например FOR XML PATH ( » ) ), элемент-оболочка не создается. Использование PATH может предоставить более простую альтернативу запросам, написанным с использованием директивы EXPLICIT. Дополнительные сведения см. в разделе Использование режима PATH с FOR XML.

BINARY BASE64
Указывает, что запрос возвращает двоичные данные в двоичном формате с кодировкой base64. При извлечении двоичных данных с использованием режима RAW и EXPLICIT этот параметр должен быть указан. Это значение по умолчанию в режиме AUTO.

TYPE
Указывает, что запрос возвращает результаты в виде xml тип. Дополнительные сведения см. в разделе Директива TYPE в FOR XML Queries.

ROOT [ (‘ RootName ‘) ]
Указывает, что в результирующий XML должен быть добавлен один элемент верхнего уровня. При желании вы можете указать имя корневого элемента для создания. Если необязательное корневое имя не указано, добавляется элемент по умолчанию.

Дополнительные сведения см. в разделе FOR XML (SQL Server).

Пример FOR XML

В следующем примере указано FOR XML AUTO с параметрами TYPE и XMLSCHEMA . Из-за опции TYPE результирующий набор возвращается клиенту как тип xml . Параметр XMLSCHEMA указывает, что встроенная схема XSD включается в возвращаемые XML-данные, а параметр ELEMENTS указывает, что результат XML ориентирован на элементы.

 ИСПОЛЬЗОВАТЬ AdventureWorks2012;
ИДТИ
ВЫБЕРИТЕ p.BusinessEntityID, Имя, Фамилия, Телефонный Номер КАК Телефон
ОТ Лицо.Лицо КАК р
ПРИСОЕДИНЯЙТЕСЬ к Person.PersonPhone КАК pph ON p.BusinessEntityID = pph.BusinessEntityID
ГДЕ Фамилия КАК 'G%'
ЗАКАЗАТЬ ПО Фамилии, Имени
FOR XML AUTO, TYPE, XMLSCHEMA, ELEMENTS XSINIL;
 

FOR JSON

JSON
Укажите FOR JSON для возврата результатов запроса в формате текста JSON. Вы также должны указать один из следующих режимов JSON: AUTO или PATH. Дополнительные сведения о предложении FOR JSON см. в разделе Форматирование результатов запроса в формате JSON с помощью FOR JSON (SQL Server).

AUTO
Автоматически форматируйте выходные данные JSON на основе структуры оператора SELECT
, указав FOR JSON AUTO . Дополнительные сведения и примеры см. в разделе Автоматическое форматирование вывода JSON в режиме AUTO (SQL Server).

PATH
Получите полный контроль над форматом вывода JSON, указав
FOR JSON PATH . Режим PATH позволяет создавать объекты-оболочки и вкладывать сложные свойства. Дополнительные сведения и примеры см. в разделе Форматирование вложенных выходных данных JSON в режиме PATH (SQL Server).

INCLUDE_NULL_VALUES
Включите нулевые значения в выходные данные JSON, указав параметр INCLUDE_NULL_VALUES с предложением FOR JSON . Если вы не укажете этот параметр, выходные данные не будут включать свойства JSON для нулевых значений в результатах запроса. Дополнительные сведения и примеры см. в разделе Включение нулевых значений в выходные данные JSON с параметром INCLUDE_NULL_VALUES (SQL Server).

ROOT [ (‘ RootName ‘) ]
Добавьте один элемент верхнего уровня к выходным данным JSON, указав параметр ROOT с предложением FOR JSON . Если вы не укажете параметр ROOT , выходные данные JSON не будут иметь корневого элемента. Дополнительные сведения и примеры см. в разделе Добавление корневого узла в выходные данные JSON с параметром ROOT (SQL Server).

WITHOUT_ARRAY_WRAPPER
Удалите квадратные скобки, окружающие вывод JSON по умолчанию, указав Параметр WITHOUT_ARRAY_WRAPPER с предложением FOR JSON . Если вы не укажете этот параметр, вывод JSON будет заключен в квадратные скобки. Используйте параметр WITHOUT_ARRAY_WRAPPER для создания одного объекта JSON в качестве вывода.