Usare l'output FOR JSON in SQL Server e nelle app client (SQL Server)Use FOR JSON output in SQL Server and in client apps (SQL Server)

In questo argomento si applica a: SìSQL ServerSìDatabase SQL di AzurenonAzure SQL Data Warehouse non Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Gli esempi seguenti illustrano alcuni modi per usare la clausola FOR JSON e il relativo output JSON in SQL ServerSQL Server o nelle app client.The following examples demonstrate some of the ways to use the FOR JSON clause and its JSON output in SQL ServerSQL Server or in client apps.

Usare l'output FOR JSON nelle variabili di SQL ServerUse FOR JSON output in SQL Server variables

L'output della clausola FOR JSON è di tipo NVARCHAR(MAX), quindi può essere assegnato a qualsiasi variabile, come illustrato nell'esempio seguente.The output of the FOR JSON clause is of type NVARCHAR(MAX), so you can assign it to any variable, as shown in the following example.

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

Usare l'output FOR JSON nelle funzioni SQL Server definite dall'utenteUse FOR JSON output in SQL Server user-defined functions

È possibile creare funzioni definite dall'utente che formattano i set di risultati come JSON e restituiscono questo output JSON.You can create user-defined functions that format result sets as JSON and return this JSON output. 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.The following example creates a user-defined function that fetches some sales order detail rows and formats them as a JSON array.

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.You can use this function in a batch or query, as shown in the following example.

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 tabellaMerge parent and child data into a single table

Nell'esempio seguente ogni set di righe figlio è formattato come matrice JSON.In the following example, each set of child rows is formatted as a JSON array. La matrice JSON diventa il valore della colonna Dettagli nella tabella padre.The JSON array becomes the value of the Details column in the parent table.

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 JSONUpdate the data in JSON columns

L'esempio seguente dimostra che è possibile aggiornare il valore di una colonna che contiene testo JSON.The following example demonstrates that you can update the value of a column that contains JSON text.

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#Use FOR JSON output in a C# client app

L'esempio seguente mostra come recuperare l'output JSON di una query in un oggetto StringBuilder in un'app client C#.The following example shows how to retrieve the JSON output of a query into a StringBuilder object in a C# client app. Si supponga che la variabile queryWithForJson contenga il testo dell'istruzione SELECT con una clausola FOR JSON.Assume that the variable queryWithForJson contains the text of a SELECT statement with a FOR JSON clause.

var queryWithForJson = "SELECT ... FOR JSON";
var conn = new SqlConnection("<connection string>");
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 sul supporto JSON integrato in SQL ServerLearn more about the built-in JSON support in SQL Server

Per soluzioni specifiche, casi d'uso e indicazioni, vedere i post del blog sul supporto JSON integrato in SQL Server e nel database SQL di Azure redatti da Jovan Popovic, Microsoft Program Manager.For lots of specific solutions, use cases, and recommendations, see the blog posts about the built-in JSON support in SQL Server and in Azure SQL Database by Microsoft Program Manager Jovan Popovic.

Vedere ancheSee Also

Formattare i risultati delle query in formato JSON con FOR JSON (SQL Server)Format Query Results as JSON with FOR JSON (SQL Server)