JSON och strängaggregering
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.