Bagikan melalui


Menggunakan output FOR JSON di SQL Database Engine dan di aplikasi klien

Berlaku untuk: SQL Server 2016 (13.x) dan versi yang lebih baru Azure SQL Database AzureSQL Managed InstanceAzure Synapse Analytics (hanya kumpulan SQL tanpa server)Database SQL di Microsoft Fabric

Contoh berikut menunjukkan beberapa cara untuk menggunakan FOR JSON klausul dan output JSON-nya di SQL Server atau di aplikasi klien. Untuk informasi selengkapnya, lihat Memformat hasil kueri sebagai JSON dengan FOR JSON.

Di Fabric Data Warehouse, FOR JSON harus menjadi operator terakhir dalam kueri, sehingga tidak diizinkan di dalam subkueri, seperti dalam contoh dalam artikel ini.

Menggunakan output FOR JSON dalam variabel SQL Database Engine

Output klausul FOR JSON berjenis nvarchar(max), sehingga Anda dapat menetapkannya ke variabel apa pun, seperti yang ditunjukkan dalam contoh berikut.

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

Menggunakan output FOR JSON dalam fungsi yang ditentukan pengguna SQL Database Engine

Anda dapat membuat fungsi yang ditentukan pengguna yang memformat tataan hasil sebagai JSON dan mengembalikan output JSON ini. Contoh berikut membuat fungsi yang ditentukan pengguna yang mengambil beberapa baris detail pesanan penjualan dan memformatnya sebagai array 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

Anda bisa menggunakan fungsi ini dalam batch atau kueri, seperti yang diperlihatkan dalam contoh berikut.

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

Menggabungkan data induk dan anak ke dalam satu tabel

Dalam contoh berikut, setiap set baris anak diformat sebagai array JSON. Array JSON menjadi nilai kolom Detail dalam tabel induk.

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  

Memperbarui data di kolom JSON

Contoh berikut menunjukkan bahwa Anda dapat memperbarui nilai kolom yang berisi teks JSON.

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

Menggunakan output FOR JSON di aplikasi klien C#

Contoh berikut menunjukkan cara mengambil output JSON kueri ke objek StringBuilder di aplikasi klien C#. Asumsikan bahwa variabel queryWithForJson berisi teks SELECT pernyataan dengan FOR JSON klausa.

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());
            }
        }
    }
}

Pelajari selengkapnya tentang JSON di SQL Database Engine

Untuk pengenalan visual dukungan JSON bawaan, lihat video berikut ini: