SQL 서버 및 클라이언트 앱에서 FOR JSON 출력 사용(SQL Server)Use FOR JSON output in SQL Server and in client apps (SQL Server)

이 항목 적용 대상: 예SQL Server예Azure SQL 데이터베이스없습니다Azure SQL 데이터 웨어하우스 없습니다 병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

다음 예제에는 SQL ServerSQL Server 또는 클라이언트 앱에서 FOR JSON 절 및 해당 JSON 출력을 사용하는 몇 가지 방법이 나와 있습니다.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.

SQL 서버 변수에서 FOR JSON 출력 사용Use FOR JSON output in SQL Server variables

FOR JSON 절의 출력은 NVARCHAR(MAX) 형식이므로 다음 예에 나와 있는 것처럼 어떤 변수에나 할당할 수 있습니다.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)  

SQL Server 사용자 정의 함수에서 FOR JSON 출력 사용Use FOR JSON output in SQL Server user-defined functions

결과 집합의 형식을 JSON으로 지정하는 사용자 정의 함수를 만든 다음 이 JSON 출력을 반환할 수 있습니다.You can create user-defined functions that format result sets as JSON and return this JSON output. 다음 예에서는 판매 주문 세부 정보 행 몇 개를 가져온 다음 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

이 함수는 다음 예에 나와 있는 것처럼 일괄 처리나 쿼리로 사용할 수 있습니다.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

단일 테이블에 부모 및 자식 데이터 병합Merge parent and child data into a single table

다음 예제에서 각 자식 행 집합을 JSON 배열로 형식 지정합니다.In the following example, each set of child rows is formatted as a JSON array. JSON 배열은 부모 테이블의 Details 열 값이 됩니다.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  

JSON 열의 데이터 업데이트Update the data in JSON columns

다음 예에서는 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 

C# 클라이언트 앱에서 FOR JSON 출력 사용Use FOR JSON output in a C# client app

다음 예에는 C# 클라이언트 앱에서 쿼리의 JSON 출력을 검색하여 StringBuilder 개체로 가져오는 방법이 나와 있습니다.The following example shows how to retrieve the JSON output of a query into a StringBuilder object in a C# client app. 여기서 queryWithForJson 변수에는 FOR JSON 절이 들어 있는 SELECT 문의 텍스트가 포함되어 있다고 가정합니다.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());
    }
}

SQL Server의 기본 제공 JSON 지원에 대한 자세한 정보Learn more about the built-in JSON support in SQL Server

많은 특정 솔루션, 사용 사례 및 권장 사항은 Microsoft 프로그램 관리자인 Jovan Popovic이 제공하는 SQL Server 및 Azure SQL Database의 기본 제공 JSON 지원에 대한 블로그 게시물을 참조하세요.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.

관련 항목:See Also

FOR JSON을 사용하여 쿼리 결과를 JSON으로 서식 지정(SQL Server)Format Query Results as JSON with FOR JSON (SQL Server)