Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2016 (13.x) e versões
posteriores Azure SQL Database
Azure SQL Managed Instance
Azure 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: