Share via


SQL Server 및 클라이언트 앱에서 FOR JSON 출력 사용(SQL Server)

적용 대상: SQL Server 2016(13.x) 이상 Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics(서버리스 SQL 풀에만 해당)

다음 예제에서는 SQL Server 또는 클라이언트 앱에서 FOR JSON 절 및 해당 JSON 출력을 사용하는 몇 가지 방법을 보여 줍니다.

SQL Server 변수에서 FOR JSON 출력 사용

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

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

SQL Server 사용자 정의 함수에서 FOR JSON 출력 사용

결과 집합의 형식을 JSON으로 지정하는 사용자 정의 함수를 만든 다음 이 JSON 출력을 반환할 수 있습니다. 다음 예제에서는 일부 판매 주문 세부 정보 행을 가져오고 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

다음 예제와 같이 일괄 처리 또는 쿼리에서 이 함수를 사용할 수 있습니다.

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

부모 및 자식 데이터를 단일 테이블로 병합

다음 예제에서 각 자식 행 집합은 JSON 배열로 형식 지정됩니다. JSON 배열은 부모 테이블의 Details 열 값이 됩니다.

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 열의 데이터 업데이트

다음 예제에서는 JSON 텍스트가 포함된 열의 값을 업데이트할 수 있음을 보여 줍니다.

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

C# 클라이언트 앱에서 FOR JSON 출력 사용

다음 예제에서는 쿼리의 JSON 출력을 C# 클라이언트 앱의 StringBuilder 개체로 검색하는 방법을 보여 있습니다. 여기서 queryWithForJson 변수에는 FOR JSON 절이 들어 있는 SELECT 문의 텍스트가 포함되어 있다고 가정합니다.

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 Server 및 Azure SQL Database의 JSON에 대해 자세히 알아보기

Microsoft 비디오

참고 항목

이 섹션의 일부 비디오 링크는 현재 작동하지 않을 수 있습니다. Microsoft는 이전에 Channel 9에 있던 콘텐츠를 새 플랫폼으로 마이그레이션하고 있습니다. 비디오가 새 플랫폼으로 마이그레이션되면 링크를 업데이트할 예정입니다.

SQL Server 및 Azure SQL Database의 기본 제공 JSON 지원에 대한 시각적 소개는 다음 비디오를 참조하세요.

참고 항목

FOR JSON을 사용하여 쿼리 결과 형식을 JSON으로 지정(SQL Server)