Uso de salidas FOR JSON en SQL Server y en aplicaciones cliente
Se aplica a: SQL Server 2016 (13.x) y versiones posteriores
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics (solo grupo de SQL sin servidor)
En los ejemplos siguientes se muestran algunas de las formas de usar la cláusula FOR JSON
y su salida JSON en SQL Server o en aplicaciones cliente.
Dar formato a los resultados de la consulta como JSON con FOR JSON
En Fabric Data Warehouse, FOR JSON
debe ser el último operador de la consulta, por lo que no se permite dentro de subconsultas, como en los ejemplos de este artículo.
Uso de salidas FOR JSON en variables de SQL Server
La salida de la cláusula FOR JSON
es de tipo nvarchar(max), por lo que puede asignarla a cualquier variable, como se muestra en el ejemplo siguiente.
DECLARE @x NVARCHAR(MAX) =
(SELECT TOP 10 *
FROM Sales.SalesOrderHeader
FOR JSON AUTO)
Uso de salidas FOR JSON en funciones definidas por el usuario de SQL Server
Puede crear funciones definidas por el usuario que formatean conjuntos de resultados como JSON y devuelven esta salida JSON. En el ejemplo siguiente se crea una función definida por el usuario que recupera algunas filas de detalle de pedido de ventas y las formatea como una 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
Puede utilizar esta función en un lote o una consulta, como se muestra en el ejemplo siguiente.
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
Fusionar datos de padre e hijo en una sola tabla
En el ejemplo siguiente, a cada conjunto de filas secundarias se le aplica el formato de una matriz JSON. La matriz JSON se convierte en el valor de la columna Detalles de la tabla principal.
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
Actualización de los datos en columnas JSON
En el ejemplo siguiente, se muestra que se puede actualizar el valor de una columna que contiene texto JSON.
UPDATE SalesOrder
SET Details =
(SELECT TOP 1 UnitPrice, OrderQty
FROM Sales.SalesOrderDetail D
WHERE D.SalesOrderId = SalesOrder.SalesOrderId
FOR JSON AUTO)
Uso de salidas FOR JSON en una aplicación cliente de C#
En el ejemplo siguiente se muestra cómo recuperar la salida JSON de una consulta en un objeto StringBuilder en una aplicación cliente de C#. Supongamos que la variable queryWithForJson
contiene el texto de una instrucción SELECT
con una 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());
}
}
}
}
Más información sobre JSON en el motor de base de datos de SQL
Vídeos de Microsoft
Para obtener una introducción visual a la compatibilidad integrada de JSON en SQL Server y Azure SQL Database, vea los siguientes vídeos:
- JSON as a bridge between NoSQL and relational worlds (JSON como puente entre los universos NoSQL y relacional)