JSON och strängaggregering

Slutförd

SQL Server 2025 introducerar nya aggregeringsfunktioner för att skapa JSON-matriser, JSON-objekt och avgränsade strängar. Dessa tillägg gör det enklare att generera strukturerade utdata, till exempel API-svar, rapporter eller loggexporter direkt från T-SQL-frågor. Med de nya funktionerna kan du flytta dataformatering till databaslagret, vilket minskar behovet av komplex omvandling på klientsidan.

Översikt över JSON- och strängaggregationsfunktioner

Nu ska vi titta på de tre nya aggregeringsfunktionerna:

JSON_ARRAYAGG

Skapar en JSON-matris från värdena för ett uttryck. Varje rads värde blir ett element i den resulterande JSON-matrisen. Det gör det enklare att generera matriser med värden, till exempel listor med ID:er eller namn.

JSON_OBJECTAGG

Skapar ett JSON-objekt från nyckel/värde-par. Det första argumentet definierar nyckeln och det andra definierar värdet. Den här värdeparkopplingen gör det enkelt att skapa JSON-dokument direkt från frågeresultat.

STRING_CONCAT_WS

Sammanfogar strängar med en angiven avgränsare genom att hoppa över NULL-värden. Funktionens namn står för Sträng CONCAT med avgränsare. Det ger ett effektivt sätt att koppla värden som namn, taggar eller kommaavgränsade listor.

Strängsammanfogningsoperator ||

SQL Server 2025 introducerar ANSI-standardoperatorn || som ett alternativ till + för sammanfogning av strängar. Det ger mer portabel syntax och rekommenderas ofta när du kombinerar flera kolumner i en enda textutdata.

UNISTR-funktion

UNISTR() returnerar en Unicode-sträng baserat på escape-sekvenser, så att du kan infoga tecken med hjälp av kodpunkt eller escape-notation. Det är användbart när du redigerar skript som innehåller icke-utskrivbara eller flerspråkiga tecken.

Exempel 1: Skapa JSON-matriser och -objekt från frågeresultat

Tänk dig att din databas lagrar kundorderdata i två tabeller Sales.Customer och Sales.SalesOrderHeader. Analysteamet behöver en JSON-rapport som sammanfattar varje kund och deras order-ID:n för integrering med en webbinstrumentpanel.

Fråga: Använd JSON_ARRAYAGG och JSON_OBJECTAGG

Följande fråga hämtar varje kund tillsammans med en JSON-matris med deras order-ID:n, omslutna i ett JSON-objekt.

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;

Results

KundID Kundens namn Kundsammanfattning
11001 Jordan Patterson {"Customer":11001,"Orders":[43722,43723,43724]}
11002 Alicia Tran {"Customer":11002,"Orders":[43725,43726]}
11003 Marco Diaz {"Customer":11003,"Orders":[43727]}

I det här exemplet JSON_ARRAYAGG samlar du in alla order-ID:t för varje kund i en JSON-matris och JSON_OBJECTAGG omsluter resultatet till ett JSON-objekt med tydliga nyckel/värde-par. Hela strukturen skapas i en T-SQL-fråga.

Exempel 2: Formatera textutdata med hjälp av STRING_CONCAT_WS

Marknadsföringsteamet behöver en lista över varje kunds köpta produktnamn avgränsade med kommatecken för en e-postkampanj. Funktionen STRING_CONCAT_WS kan generera dessa resultat rent och utesluta null-värden.

Fråga: Koppla produktnamn med en avgränsare

Följande SQL-fråga hämtar varje kund tillsammans med en kommaavgränsad lista över produkter som de har köpt.

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;

Results

KundID Kundens namn ProdukterKöpta
11001 Jordan Patterson Touring-2000 Blå, 50, Mountain-100 Black, 44
11002 Alicia Tran Väg-250 Gul, 44, Berg-200 Röd, 48
11003 Marco Diaz Touring-3000 Blå, 62

STRING_CONCAT_WS Här kopplar du produktnamn med kommatecken och ignorerar NULL-poster automatiskt, vilket undviker manuell COALESCEeller ISNULL logik.

Exempel 3: Kombinera JSON och avgränsad text för API-utdata

Du kan också använda dessa funktioner tillsammans för att förbereda strukturerade data för ett API-svar. Följande fråga skapar en JSON-matris med objekt där varje objekt innehåller en kunds namn och kommaavgränsad produktlista.

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;

Resultatexempel

[
  {"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"}
]

Ett program använder den här strukturen direkt eller exporterar den som ett JSON-dokument via verktyg som SQL Server Management Studio (SSMS) eller Azure Data Studio.

Sammanfattning

SQL Server 2025 lägger till JSON_ARRAYAGG, JSON_OBJECTAGGoch STRING_CONCAT_WS för att förenkla skapandet av strukturerad text och JSON-utdata i T-SQL. Med de här funktionerna kan du generera programklara data från frågor utan extern kod. Oavsett om du förbereder JSON-nyttolaster, konstruerar rapporter eller formaterar API-svar gör dessa aggregeringsfunktioner SQL Server 2025 till en mer mångsidig plattform för moderna dataprogram.