Aracılığıyla paylaş


SQL Veritabanı Altyapısı'nda ve istemci uygulamalarında FOR JSON çıkışını kullanma

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümleri Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (serverless SQL pool only)SQL database in Microsoft Fabric

Aşağıdaki örneklerde, SQL Server'da veya istemci uygulamalarında FOR JSON yan tümcesini ve JSON çıkışını kullanmanın bazı yolları gösterilmektedir. Daha fazla bilgi için bkz. FOR JSON ile sorgu sonuçlarını JSON olarak biçimlendirme.

Fabric Veri Ambarı'nda, FOR JSON sorgunun son işleci olmalıdır ve bu yüzden, bu makaledeki örneklerde olduğu gibi, alt sorgular içinde kullanılamaz.

SQL Veritabanı Altyapısı değişkenlerinde FOR JSON çıkışını kullanma

FOR JSON yan tümcesinin çıkışı nvarchar(max) türündedir, bu nedenle aşağıdaki örnekte gösterildiği gibi herhangi bir değişkene atayabilirsiniz.

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

SQL Veritabanı Altyapısı kullanıcı tanımlı işlevlerinde FOR JSON çıktısını kullanma

Sonuç kümelerini JSON olarak biçimlendiren ve bu JSON çıkışını döndüren kullanıcı tanımlı işlevler oluşturabilirsiniz. Aşağıdaki örnek, bazı satış siparişi ayrıntı satırlarını getiren ve bunları JSON dizisi olarak biçimlendiren kullanıcı tanımlı bir işlev oluşturur.

CREATE FUNCTION GetSalesOrderDetails(@salesOrderId int)  
 RETURNS NVARCHAR(MAX)  
AS  
BEGIN  
   RETURN (SELECT UnitPrice, OrderQty  
           FROM Sales.SalesOrderDetail  
           WHERE SalesOrderID = @salesOrderId  
           FOR JSON AUTO)  
END

Aşağıdaki örnekte gösterildiği gibi bu işlevi bir toplu iş veya sorguda kullanabilirsiniz.

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

Ebeveyn ve çocuk verilerini tek bir tabloda birleştirme

Aşağıdaki örnekte, her alt satır kümesi bir JSON dizisi olarak biçimlendirilmiştir. JSON dizisi, üst tablodaki Details sütununun değeri olur.

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  

JSON sütunlarındaki verileri güncelleştirme

Aşağıdaki örnek, JSON metni içeren bir sütunun değerini güncelleştirebileceğinizi gösterir.

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

C# istemci uygulamasında FOR JSON çıkışını kullanma

Aşağıdaki örnekte, bir sorgunun JSON çıkışını C# istemci uygulamasındaki bir StringBuilder nesnesine alma işlemi gösterilmektedir. queryWithForJson isimli değişkenin, SELECT yan tümcesi içeren bir FOR JSON ifadesinin metnini içerdiğini varsayalım.

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

SQL Veritabanı Altyapısı'nda JSON hakkında daha fazla bilgi edinin

Yerleşik JSON desteğine görsel bir giriş için aşağıdaki videolara bakın:

  • NoSQL ile ilişkisel dünyalar arasında bir köprü olarak JSON
  • FOR JSON ile sorgu sonuçlarını JSON olarak biçimlendirme