Partilhar via


Usar a saída FOR JSON no Mecanismo de Base de Dados SQL e em aplicações cliente

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (apenas server less SQL pool)Base de dados SQL no Microsoft Fabric

Os exemplos a seguir demonstram algumas das maneiras de usar a FOR JSON cláusula e sua saída JSON no SQL Server ou em aplicativos cliente. Para obter mais informações, consulte Formatar resultados de consulta como JSON com FOR JSON.

No Fabric Data Warehouse, FOR JSON deve ser o último operador na consulta e, portanto, não é permitido dentro de subconsultas, como nos exemplos deste artigo.

Usar a saída FOR JSON nas variáveis do motor de base de dados SQL

A saída da FOR JSON cláusula é do tipo nvarchar(max), portanto, você pode atribuí-la a qualquer variável, conforme mostrado no exemplo a seguir.

DECLARE @x NVARCHAR(MAX) =
  (SELECT TOP 10 *
     FROM Sales.SalesOrderHeader
     FOR JSON AUTO)  

Usar a saída FOR JSON nas funções definidas pelo usuário do Mecanismo de Banco de Dados SQL

Você pode criar funções definidas pelo usuário que formatam conjuntos de resultados como JSON e retornam essa saída JSON. O exemplo a seguir cria uma função definida pelo usuário que busca algumas linhas de detalhes da ordem de venda e as formata como uma matriz 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

Você pode usar essa função em um lote ou consulta, conforme mostrado no exemplo a seguir.

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

Mesclar dados pai e filho em uma única tabela

No exemplo a seguir, cada conjunto de linhas filho é formatado como uma matriz JSON. A matriz JSON torna-se o valor da coluna Detalhes na tabela pai.

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  

Atualizar os dados em colunas JSON

O exemplo a seguir demonstra que você pode atualizar o valor de uma coluna que contém texto JSON.

UPDATE SalesOrder  
SET Details =  
     (SELECT TOP 1 UnitPrice, OrderQty  
       FROM Sales.SalesOrderDetail D  
       WHERE D.SalesOrderId = SalesOrder.SalesOrderId  
      FOR JSON AUTO) 

Usar a saída FOR JSON em um aplicativo cliente C#

O exemplo a seguir mostra como recuperar a saída JSON de uma consulta em um objeto StringBuilder em um aplicativo cliente C#. Suponha que a variável queryWithForJson contém o texto de uma declaração SELECT com uma cláusula 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());
            }
        }
    }
}

Saiba mais sobre JSON no Mecanismo de Banco de Dados SQL

Para obter uma introdução visual ao suporte JSON integrado, consulte os seguintes vídeos: