JSON 및 문자열 집계

완료됨

SQL Server 2025에는 JSON 배열, JSON 개체 및 구분된 문자열을 빌드하기 위한 새로운 집계 함수가 도입되었습니다. 이러한 추가를 통해 T-SQL 쿼리에서 직접 API 응답, 보고서 또는 로그 내보내기와 같은 구조화된 출력을 보다 쉽게 생성할 수 있습니다. 새 함수를 사용하면 데이터 서식을 데이터베이스 계층으로 이동하여 복잡한 클라이언트 쪽 변환의 필요성을 줄일 수 있습니다.

JSON 및 문자열 집계 함수 개요

세 가지 새로운 집계 함수를 살펴보겠습니다.

JSON_ARRAYAGG

식 값에서 JSON 배열을 만듭니다. 각 행의 값은 결과 JSON 배열의 요소가 됩니다. ID 또는 이름 목록과 같은 값 배열 생성을 간소화합니다.

JSON_OBJECTAGG

키-값 쌍에서 JSON 개체를 만듭니다. 첫 번째 인수는 키를 정의하고 두 번째 인수는 값을 정의합니다. 이 값 쌍을 사용하면 쿼리 결과에서 직접 JSON 문서를 쉽게 빌드할 수 있습니다.

STRING_CONCAT_WS

NULL 값을 건너뛰는 동안 지정된 구분 기호로 문자열을 연결합니다. 함수의 이름은 구분 기호가 있는 String CONCAT을 의미합니다. 이름, 태그 또는 쉼표로 구분된 목록과 같은 값을 조인하는 효율적인 방법을 제공합니다.

문자열 연결 연산자 ||

SQL Server 2025에서는 문자열 연결을 위한 ||의 대안으로 ANSI 표준 + 연산자를 도입했습니다. 더 이식 가능한 구문을 제공하며 여러 열을 단일 텍스트 출력으로 결합할 때 선호되는 경우가 많습니다.

UNISTR 함수

UNISTR() 는 이스케이프 시퀀스를 기반으로 유니코드 문자열을 반환하므로 코드 포인트 또는 이스케이프 표기법으로 문자를 삽입할 수 있습니다. 인쇄할 수 없거나 다국어 문자를 포함하는 스크립트를 작성할 때 유용합니다.

예제 1: 쿼리 결과에서 JSON 배열 및 개체 빌드

데이터베이스가 고객 주문 데이터를 두 테이블에 Sales.Customer 저장하는 경우를 Sales.SalesOrderHeader상상해 보십시오. 분석 팀은 웹 대시보드와 통합하기 위해 각 고객 및 주문 ID를 요약하는 JSON 보고서가 필요합니다.

쿼리: JSON_ARRAYAGG 및 JSON_OBJECTAGG 사용

다음 쿼리는 JSON 개체에 래핑된 주문 ID의 JSON 배열과 함께 각 고객을 검색합니다.

SELECT
    C.CustomerID,
    C.FirstName + ' ' + C.LastName AS CustomerName,
    JSON_OBJECTAGG(
        'Customer' : C.CustomerID,
        'Orders'   : JSON_ARRAYAGG(SOH.SalesOrderID)
    ) AS CustomerSummary
FROM Sales.Customer AS C
JOIN Sales.SalesOrderHeader AS SOH
    ON C.CustomerID = SOH.CustomerID
GROUP BY C.CustomerID, C.FirstName, C.LastName;

결과

고객ID 고객명 고객요약
11001 조던 패터슨 {"Customer":11001,"Orders":[43722,43723,43724]}
11002 알리시아 트란 {"Customer":11002,"Orders":[43725,43726]}
11003 마르코 디아즈 {"Customer":11003,"Orders":[43727]}

이 예제 JSON_ARRAYAGG 에서는 각 고객에 대한 모든 주문 ID를 JSON 배열로 수집하고 명확한 JSON_OBJECTAGG 키-값 쌍을 사용하여 결과를 JSON 개체로 래핑합니다. 전체 구조는 하나의 T-SQL 쿼리에서 생성됩니다.

예제 2: STRING_CONCAT_WS 사용하여 텍스트 출력 서식 지정

마케팅 팀은 이메일 캠페인을 위해 각 고객의 구매 제품 이름을 쉼표로 구분하여 나열해야 합니다. 함수는 STRING_CONCAT_WS NULL 값을 생략하여 이러한 결과를 깔끔하게 생성할 수 있습니다.

쿼리: 제품 이름을 구분 기호로 조인

다음 쿼리는 구매한 제품의 쉼표로 구분된 목록과 함께 각 고객을 검색합니다.

SELECT
    C.CustomerID,
    C.FirstName + ' ' + C.LastName AS CustomerName,
    STRING_CONCAT_WS(', ',
        P.Name
    ) AS ProductsPurchased
FROM Sales.Customer AS C
JOIN Sales.SalesOrderHeader AS SOH
    ON C.CustomerID = SOH.CustomerID
JOIN Sales.SalesOrderDetail AS SOD
    ON SOH.SalesOrderID = SOD.SalesOrderID
JOIN Production.Product AS P
    ON SOD.ProductID = P.ProductID
GROUP BY C.CustomerID, C.FirstName, C.LastName;

결과

고객ID 고객명 구매한제품
11001 조던 패터슨 투어링-2000 블루, 50, 마운틴-100 블랙, 44
11002 알리시아 트란 Road-250 노란색, 44, Mountain-200 빨간색, 48
11003 마르코 디아즈 투어링-3000 블루, 62

여기서는 제품 이름을 쉼표 STRING_CONCAT_WS로 연결하고 NULL 항목을 자동으로 무시하여 수동으로 COALESCE 또는 ISNULL 논리를 사용하지 않아도 됩니다.

예제 3: API 출력에 JSON 및 구분된 텍스트 결합

이러한 함수를 함께 사용하여 API 응답에 대한 구조적 데이터를 준비할 수도 있습니다. 다음 쿼리는 각 개체에 고객의 이름과 쉼표로 구분된 제품 목록이 포함된 개체의 JSON 배열을 만듭니다.

SELECT
    JSON_ARRAYAGG(
        JSON_OBJECTAGG(
            'Customer' : C.FirstName + ' ' + C.LastName,
            'Products' : STRING_CONCAT_WS(', ', P.Name)
        )
    ) AS ApiOutput
FROM Sales.Customer AS C
JOIN Sales.SalesOrderHeader AS SOH
    ON C.CustomerID = SOH.CustomerID
JOIN Sales.SalesOrderDetail AS SOD
    ON SOH.SalesOrderID = SOD.SalesOrderID
JOIN Production.Product AS P
    ON SOD.ProductID = P.ProductID
GROUP BY C.CustomerID, C.FirstName, C.LastName;

결과 샘플

[
  {"Customer":"Jordan Patterson","Products":"Touring-2000 Blue, 50, Mountain-100 Black, 44"},
  {"Customer":"Alicia Tran","Products":"Road-250 Yellow, 44, Mountain-200 Red, 48"},
  {"Customer":"Marco Diaz","Products":"Touring-3000 Blue, 62"}
]

애플리케이션은 이 구조를 직접 사용하거나 SSMS(SQL Server Management Studio) 또는 Azure Data Studio와 같은 도구를 통해 JSON 문서로 내보냅니다.

요약

SQL Server 2025는 T-SQL 내에서 구조화된 텍스트와 JSON 출력을 간소화하기 위해 JSON_ARRAYAGG, JSON_OBJECTAGG, STRING_CONCAT_WS를 추가합니다. 이러한 함수를 사용하면 외부 코드 없이 쿼리에서 애플리케이션 준비 데이터를 생성할 수 있습니다. JSON 페이로드를 준비하거나, 보고서를 생성하거나, API 응답의 형식을 지정하는 경우 이러한 집계 기능을 통해 SQL Server 2025는 최신 데이터 애플리케이션을 위한 보다 다양한 플랫폼이 됩니다.