JSON și agregarea șirurilor
SQL Server 2025 introduce noi funcții de agregare pentru construirea de matrice JSON, obiecte JSON și șiruri delimitate. Aceste adăugiri facilitează generarea de rezultate structurate, cum ar fi răspunsuri API, rapoarte sau exporturi de jurnale direct din interogări T-SQL. Noile funcții vă permit să mutați formatarea datelor în stratul bazei de date, reducând nevoia de transformare complexă pe partea clientului.
Prezentare generală a funcțiilor JSON și de agregare a șirurilor
Să ne uităm la cele trei noi funcții de agregare:
JSON_ARRAYAGG
Creează o matrice JSON din valorile unei expresii. Valoarea fiecărui rând devine un element în matricea JSON rezultată. Simplifică generarea de matrice de valori, cum ar fi liste de ID-uri sau nume.
JSON_OBJECTAGG
Creează un obiect JSON din perechi cheie-valoare. Primul argument definește cheia, iar al doilea definește valoarea. Această asociere de valori facilitează construirea documentelor JSON direct din rezultatele interogării.
STRING_CONCAT_WS
Concatenează șirurile cu un separator specificat în timp ce se omit valorile NULL. Numele funcției înseamnă String CONCAT With Separator. Oferă o modalitate eficientă de a uni valori precum nume, etichete sau liste delimitate prin virgulă.
Operator de concatenare a șirurilor ||
SQL Server 2025 introduce operatorul standard || ANSI ca alternativă la + concatenarea șirurilor. Oferă o sintaxă mai portabilă și este adesea preferată atunci când combinați mai multe coloane într-o singură ieșire text.
Funcția UNISTR
UNISTR() returnează un șir Unicode bazat pe secvențe de evadare, permițându-vă să inserați caractere prin punct de cod sau notație de evadare. Este util atunci când creați scripturi care includ caractere neimprimabile sau multilingve.
Exemplul 1: Construiți matrice și obiecte JSON din rezultatele interogării
Imaginați-vă că baza de date stochează datele comenzilor clienților în două tabele Sales.Customer și Sales.SalesOrderHeader. Echipa de analiză are nevoie de un raport JSON care să rezume fiecare client și ID-urile comenzilor sale pentru integrarea cu un tablou de bord web.
Interogare: Utilizați JSON_ARRAYAGG și JSON_OBJECTAGG
Următoarea interogare preia fiecare client împreună cu o matrice JSON a ID-urilor lor de comandă, înfășurate într-un obiect 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;
Rezultate
| ID client | Nume client | Rezumatul clientului |
|---|---|---|
| 11001 | Jordan Patterson | {"Client":11001,"Comenzi":[43722,43723,43724]} |
| 11002 | Alicia Tran | {"Client":11002,"Comenzi":[43725,43726]} |
| 11003 | Marco Diaz | {"Client":11003,"Comenzi":[43727]} |
În acest exemplu, JSON_ARRAYAGG colectează toate ID-urile de comandă pentru fiecare client într-o matrice JSON și JSON_OBJECTAGG înfășoară rezultatul într-un obiect JSON cu perechi cheie-valoare clare. Întreaga structură este produsă într-o singură interogare T-SQL.
Exemplul 2: Formatați ieșirea textului folosind STRING_CONCAT_WS
Echipa de marketing are nevoie de o listă cu numele produselor achiziționate de fiecare client, separate prin virgule pentru o campanie de e-mail. Funcția STRING_CONCAT_WS poate genera aceste rezultate în mod curat, omițând orice valori NULL.
Interogare: Asocierea numelor de produse cu un separator
Următoarea interogare preia fiecare client împreună cu o listă separată prin virgulă a produselor pe care le-au achiziționat.
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;
Rezultate
| ID client | Nume client | ProduseAchiziționate |
|---|---|---|
| 11001 | Jordan Patterson | Touring-2000 Albastru, 50, Mountain-100 Negru, 44 |
| 11002 | Alicia Tran | Drum-250 Galben, 44, Munte-200 Roșu, 48 |
| 11003 | Marco Diaz | Touring-3000 Albastru, 62 |
Aici, STRING_CONCAT_WS unește numele produselor cu virgule și ignoră automat intrările NULL, evitând manualul COALESCEsau ISNULL logica.
Exemplul 3: Combinați JSON și text delimitat pentru ieșirea API
De asemenea, puteți utiliza aceste funcții împreună pentru a pregăti date structurate pentru un răspuns API. Următoarea interogare creează o matrice JSON de obiecte în care fiecare obiect conține numele unui client și o listă de produse delimitate prin virgulă.
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;
Eșantion de rezultat
[
{"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"}
]
O aplicație consumă direct această structură sau o exportă ca document JSON prin instrumente precum SQL Server Management Studio (SSMS) sau Azure Data Studio.
Rezumat
SQL Server 2025 adaugă JSON_ARRAYAGG, JSON_OBJECTAGG, și STRING_CONCAT_WS pentru a simplifica construirea de text structurat și ieșire JSON în T-SQL. Aceste funcții vă permit să generați date gata de aplicație din interogări fără cod extern. Indiferent dacă pregătiți sarcini JSON, construiți rapoarte sau formatați răspunsuri API, aceste caracteristici de agregare fac din SQL Server 2025 o platformă mai versatilă pentru aplicațiile moderne de date.