AUTO 모드를 사용하여 JSON 출력 형식 자동 지정(SQL Server)Format JSON Output Automatically with AUTO Mode (SQL Server)

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

SELECT 문의 구조에 따라 FOR JSON 절 출력 형식을 자동으로 지정하려면 AUTO 옵션을 지정합니다.To format the output of the FOR JSON clause automatically based on the structure of the SELECT statement, specify the AUTO option.

AUTO 옵션을 지정하면 SELECT 목록의 열 순서와 해당 원본 테이블에 따라 JSON 출력의 형식이 자동으로 결정됩니다.When you specify the AUTO option, the format of the JSON output is automatically determined based on the order of columns in the SELECT list and their source tables. 이 형식은 변경할 수 없습니다.You can't change this format.

대신 PATH 옵션을 사용하여 출력에 대한 제어를 관리합니다.The alternative is to use the PATH option to maintain control over the output.

FOR JSON AUTO 옵션을 사용하는 쿼리에는 FROM 절이 있어야 합니다.A query that uses the FOR JSON AUTO option must have a FROM clause.

아래에는 AUTO 옵션에서 FOR JSON 절을 사용하는 몇 가지 예가 나와 있습니다.Here are some examples of the FOR JSON clause with the AUTO option.

Examples

예제 1Example 1

QueryQuery

쿼리에서 하나의 테이블만 참조하는 경우 FOR JSON AUTO 절의 결과는 FOR JSON PATH의 결과와 비슷합니다.When a query references only one table, the results of the FOR JSON AUTO clause are similar to the results of FOR JSON PATH . 이 경우 FOR JSON AUTO는 중첩된 개체를 만들지 않습니다.In this case, FOR JSON AUTO doesn't create nested objects. 유일한 차이점은 FOR JSON AUTO는 점으로 구분된 별칭(예를 들어 다음 예제에서 Info.MiddleName)을 중첩된 개체가 아닌 점이 있는 키로 출력한다는 것입니다.The only difference is that FOR JSON AUTO outputs dot-separated aliases (for example, Info.MiddleName in the following example) as keys with dots, not as nested objects.

SELECT TOP 5   
       BusinessEntityID As Id,  
       FirstName, LastName,  
       Title As 'Info.Title',  
       MiddleName As 'Info.MiddleName'  
   FROM Person.Person  
   FOR JSON AUTO  

결과Result

[{
    "Id": 1,
    "FirstName": "Ken",
    "LastName": "Sánchez",
    "Info.MiddleName": "J"
}, {
    "Id": 2,
    "FirstName": "Terri",
    "LastName": "Duffy",
    "Info.MiddleName": "Lee"
}, {
    "Id": 3,
    "FirstName": "Roberto",
    "LastName": "Tamburello"
}, {
    "Id": 4,
    "FirstName": "Rob",
    "LastName": "Walters"
}, {
    "Id": 5,
    "FirstName": "Gail",
    "LastName": "Erickson",
    "Info.Title": "Ms.",
    "Info.MiddleName": "A"
}]

예제 2Example 2

QueryQuery

테이블을 조인하면 첫 번째 테이블의 열이 루트 개체의 속성으로 생성됩니다.When you join tables, columns in the first table are generated as properties of the root object. 두 번째 테이블의 열은 중첩된 개체의 속성으로 생성됩니다.Columns in the second table are generated as properties of a nested object. 테이블 이름 또는 두 번째 테이블의 별칭(예를 들어 다음 예제에서 D)은 중첩된 배열의 이름으로 사용됩니다.The table name or alias of the second table (for example, D in the following example) is used as the name of the nested array.

SELECT TOP 2 SalesOrderNumber,  
        OrderDate,  
        UnitPrice,  
        OrderQty  
FROM Sales.SalesOrderHeader H  
   INNER JOIN Sales.SalesOrderDetail D  
     ON H.SalesOrderID = D.SalesOrderID  
FOR JSON AUTO   

결과Result

[{
    "SalesOrderNumber": "SO43659",
    "OrderDate": "2011-05-31T00:00:00",
    "D": [{
        "UnitPrice": 24.99,
        "OrderQty": 1
    }]
}, {
    "SalesOrderNumber": "SO43659",
    "D": [{
        "UnitPrice": 34.40
    }, {
        "UnitPrice": 134.24,
        "OrderQty": 5
    }]
}]

예 3Example 3

QueryQuery
FOR JSON AUTO를 사용하는 대신 다음 예제에서처럼 SELECT 문에 FOR JSON PATH 하위 쿼리를 중첩할 수 있습니다.Instead of using FOR JSON AUTO, you can nest a FOR JSON PATH subquery in the SELECT statement, as shown in the following example. 이 예제는 앞의 예제와 동일한 결과를 출력합니다.This example outputs the same result as the preceding example.

SELECT TOP 2  
    SalesOrderNumber,  
    OrderDate,  
    (SELECT UnitPrice, OrderQty  
      FROM Sales.SalesOrderDetail AS D  
      WHERE H.SalesOrderID = D.SalesOrderID  
     FOR JSON PATH) AS D  
FROM Sales.SalesOrderHeader AS H  
FOR JSON PATH  

결과Result

[{
    "SalesOrderNumber": "SO43659",
    "OrderDate": "2011-05-31T00:00:00",
    "D": [{
        "UnitPrice": 24.99,
        "OrderQty": 1
    }]
}, {
    "SalesOrderNumber": "SO4390",
    "D": [{
        "UnitPrice": 24.99
    }]
}]

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 절(Transact-SQL)FOR Clause (Transact-SQL)