Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: SQL Server 2016 (13.x) e versioni
successive Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics (solo server less SQL pool)
SQL database in Microsoft Fabric
Gli esempi seguenti illustrano alcuni dei modi per usare la FOR JSON clausola e il relativo output JSON in SQL Server o nelle app client. Per altre informazioni, vedere Formattare i risultati delle query in formato JSON con FOR JSON.
In Fabric Data Warehouse FOR JSON deve essere l'ultimo operatore nella query e pertanto non è consentito all'interno di sottoquery, come negli esempi di questo articolo.
Usare l'output FOR JSON nelle variabili del motore di database SQL
L'output della FOR JSON clausola è di tipo nvarchar(max),quindi è possibile assegnarlo a qualsiasi variabile, come illustrato nell'esempio seguente.
DECLARE @x NVARCHAR(MAX) =
(SELECT TOP 10 *
FROM Sales.SalesOrderHeader
FOR JSON AUTO)
Usare l'output FOR JSON nelle funzioni definite dall'utente del motore di database SQL
È possibile creare funzioni definite dall'utente che formattano i set di risultati come JSON e restituiscono questo output JSON. Nell'esempio seguente viene creata una funzione definita dall'utente che recupera alcune righe di dettaglio di un ordine di vendita e le formatta come matrice 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
Questa funzione può essere usata in un batch o in una query, come mostrato nell'esempio seguente.
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
Unire dati padre e figlio in una singola tabella
Nell'esempio seguente ogni set di righe figlio è formattato come matrice JSON. La matrice JSON diventa il valore della colonna Dettagli nella tabella padre.
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
Aggiornare i dati nelle colonne JSON
L'esempio seguente dimostra che è possibile aggiornare il valore di una colonna che contiene testo JSON.
UPDATE SalesOrder
SET Details =
(SELECT TOP 1 UnitPrice, OrderQty
FROM Sales.SalesOrderDetail D
WHERE D.SalesOrderId = SalesOrder.SalesOrderId
FOR JSON AUTO)
Usare l'output FOR JSON in un'app client C#
L'esempio seguente mostra come recuperare l'output JSON di una query in un oggetto StringBuilder in un'app client C#. Si supponga che la variabile queryWithForJson contenga il testo di un'istruzione SELECT con una FOR JSON clausola .
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());
}
}
}
}
Altre informazioni su JSON nel motore di database SQL
Per un'introduzione visiva al supporto JSON predefinito, vedere i video seguenti:
- JSON as a bridge between NoSQL and relational worlds (JSON come ponte tra NoSQL e gli ambienti relazionali)