Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения:SQL Server 2016 (13.x) и более поздние версии
, База данных SQL Azure
, Управляемый экземпляр SQL Azure
, Azure Synapse Analytics (только бессерверный пул SQL)
В следующих примерах показаны некоторые способы использования предложения FOR JSON
и выходных данных JSON в SQL Server или клиентских приложениях.
Форматирование результатов запроса в формате JSON с помощью FOR JSON
В хранилище данных Fabric FOR JSON
должен быть последним оператором в запросе, поэтому не допускается внутри вложенных запросов, как в примерах этой статьи.
Использование выходных данных FOR JSON в переменных SQL Server
Результат выражения FOR JSON
с типом nvarchar(max), поэтому его можно присвоить любой переменной, как показано в следующем примере.
DECLARE @x NVARCHAR(MAX) =
(SELECT TOP 10 *
FROM Sales.SalesOrderHeader
FOR JSON AUTO)
Использование выходных данных FOR JSON в определяемых пользователем функциях SQL Server
Вы можете создать определяемые пользователем функции, которые форматируют результирующие наборы как JSON и возвращают эти выходные данные JSON. В следующем примере создается пользовательская функция, которая извлекает некоторые строки с подробностями заказов на продажу и форматирует их как массив JSON.
CREATE FUNCTION GetSalesOrderDetails(@salesOrderId int)
RETURNS NVARCHAR(MAX)
AS
BEGIN
RETURN (SELECT UnitPrice, OrderQty
FROM Sales.SalesOrderDetail
WHERE SalesOrderID = @salesOrderId
FOR JSON AUTO)
END
Можно использовать эту функцию в пакете или запросе, как показано в следующем примере.
DECLARE @x NVARCHAR(MAX) = dbo.GetSalesOrderDetails(43659)
PRINT dbo.GetSalesOrderDetails(43659)
SELECT TOP 10
H.*, dbo.GetSalesOrderDetails(H.SalesOrderId) AS Details
FROM Sales.SalesOrderHeader H
Слияние родительских и дочерних данных в одну таблицу
В следующем примере каждый набор дочерних строк форматируется как массив JSON. Массив JSON становится значением столбца сведений в родительской таблице.
SELECT TOP 10 SalesOrderId, OrderDate,
(SELECT TOP 3 UnitPrice, OrderQty
FROM Sales.SalesOrderDetail D
WHERE H.SalesOrderId = D.SalesOrderID
FOR JSON AUTO) AS Details
INTO SalesOrder
FROM Sales.SalesOrderHeader H
Обновление данных в столбцах JSON
В следующем примере показано, что можно обновлять значения столбцов, содержащих текст JSON.
UPDATE SalesOrder
SET Details =
(SELECT TOP 1 UnitPrice, OrderQty
FROM Sales.SalesOrderDetail D
WHERE D.SalesOrderId = SalesOrder.SalesOrderId
FOR JSON AUTO)
Использование выходных данных FOR JSON в клиентском приложении C#
В приведенном ниже примере показано, как получить выходные данные JSON запроса в объект StringBuilder в клиентском приложении C#. Предположим, что переменная queryWithForJson
содержит текст инструкции SELECT
с условием FOR JSON
.
var queryWithForJson = "SELECT ... FOR JSON";
using(var conn = new SqlConnection("<connection string>"))
{
using(var cmd = new SqlCommand(queryWithForJson, conn))
{
conn.Open();
var jsonResult = new StringBuilder();
var reader = cmd.ExecuteReader();
if (!reader.HasRows)
{
jsonResult.Append("[]");
}
else
{
while (reader.Read())
{
jsonResult.Append(reader.GetValue(0).ToString());
}
}
}
}
Дополнительные сведения о JSON в ядре СУБД SQL
Видео Майкрософт
Наглядные инструкции по встроенной поддержке JSON в SQL Server и базе данных SQL Azure см. в следующих видео.
- JSON as a bridge between NoSQL and relational worlds (JSON как мост между NoSQL и реляционными решениями)