Kod JSON i agregacja ciągów
Program SQL Server 2025 wprowadza nowe funkcje agregacji do tworzenia tablic JSON, obiektów JSON i ciągów rozdzielonych. Te dodatki ułatwiają generowanie ustrukturyzowanych danych wyjściowych, takich jak odpowiedzi interfejsu API, raporty lub eksporty dzienników bezpośrednio z zapytań języka T-SQL. Nowe funkcje umożliwiają przenoszenie formatowania danych do warstwy bazy danych, co zmniejsza potrzebę złożonej transformacji po stronie klienta.
Omówienie funkcji agregacyjnych JSON i stringów
Przyjrzyjmy się trzem nowym funkcjom agregacji:
JSON_ARRAYAGG
Tworzy tablicę JSON na podstawie wartości wyrażenia. Wartość każdego wiersza staje się elementem w wynikowej tablicy JSON. Upraszcza generowanie tablic wartości, takich jak listy identyfikatorów lub nazw.
JSON_OBJECTAGG
Tworzy obiekt JSON na podstawie par klucz-wartość. Pierwszy argument definiuje klucz, a drugi definiuje wartość. Ta parowanie wartości ułatwia kompilowanie dokumentów JSON bezpośrednio z wyników zapytania.
STRING_CONCAT_WS
Łączy ciągi z określonym separatorem podczas pomijania wartości NULL. Nazwa funkcji oznacza ciąg CONCAT With Separator. Zapewnia wydajny sposób łączenia wartości, takich jak nazwy, tagi lub listy rozdzielane przecinkami.
Operator łączenia ciągów ||
Program SQL Server 2025 wprowadza standardowy operator ANSI || jako alternatywę + dla łączenia ciągów. Zapewnia bardziej elastyczną składnię i jest często preferowany podczas łączenia wielu kolumn w pojedynczy wynik tekstowy.
Funkcja UNISTR
UNISTR() Zwraca ciąg Unicode oparty na sekwencjach znaków ucieczki, umożliwiając wstawianie znaków według punktu kodu lub notacji ucieczki. Jest to przydatne podczas tworzenia skryptów zawierających znaki niedrukowalne lub wielojęzyczne.
Przykład 1. Kompilowanie tablic i obiektów JSON z wyników zapytania
Wyobraź sobie, że baza danych przechowuje dane zamówień klientów w dwóch tabelach, Sales.Customer i Sales.SalesOrderHeader. Zespół analityczny potrzebuje raportu JSON podsumowującego każdego klienta i identyfikatory ich zamówień na potrzeby integracji z internetowym pulpitem nawigacyjnym.
Zapytanie: użyj JSON_ARRAYAGG i JSON_OBJECTAGG
Poniższe zapytanie pobiera każdego klienta wraz z obiektem JSON zawierającym tablicę identyfikatorów zamówień klientów.
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
| Identyfikator klienta | NazwaKlienta | Podsumowanie klienta |
|---|---|---|
| 11001 | Jordan Patterson | {"Customer":11001,"Orders":[43722,43723,43724]} |
| 11002 | Alicia Tran | {"Customer":11002,"Orders":[43725,43726]} |
| 11003 | Marco Diaz | {"Customer":11003,"Orders":[43727]} |
W tym przykładzie JSON_ARRAYAGG zbiera wszystkie identyfikatory zamówień dla każdego klienta w tablicy JSON i JSON_OBJECTAGG opakowuje wynik w obiekt JSON z przejrzystymi parami klucz-wartość. Cała struktura jest generowana w jednym zapytaniu T-SQL.
Przykład 2. Formatowanie danych wyjściowych tekstu przy użyciu STRING_CONCAT_WS
Zespół ds. marketingu potrzebuje listy zakupionych przez klienta nazw produktów rozdzielonych przecinkami dla kampanii e-mail. Funkcja STRING_CONCAT_WS może generować te wyniki w sposób czysty, pomijając wszystkie wartości NULL.
Zapytanie: łączenie nazw produktów za pomocą separatora
Poniższe zapytanie pobiera każdego klienta wraz z rozdzielaną przecinkami listą zakupionych produktów.
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
| Identyfikator klienta | NazwaKlienta | ProduktyZakupione |
|---|---|---|
| 11001 | Jordan Patterson | Touring-2000 Blue, 50, Mountain-100 Black, 44 |
| 11002 | Alicia Tran | Road-250 Yellow, 44, Mountain-200 Czerwony, 48 |
| 11003 | Marco Diaz | Touring-3000 Blue, 62 |
STRING_CONCAT_WS Łączy tutaj nazwy produktów za pomocą przecinków i automatycznie ignoruje wpisy NULL, unikając ręcznego COALESCE lub ISNULL logicznego.
Przykład 3. Łączenie kodu JSON i rozdzielanego tekstu dla danych wyjściowych interfejsu API
Możesz również użyć tych funkcji razem, aby przygotować dane ustrukturyzowane na potrzeby odpowiedzi interfejsu API. Poniższe zapytanie tworzy tablicę obiektów JSON, w której każdy obiekt zawiera nazwę klienta i listę produktów rozdzielanych przecinkami.
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;
Przykład wyników
[
{"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"}
]
Aplikacja bezpośrednio korzysta z tej struktury lub eksportuje ją jako dokument JSON za pomocą narzędzi, takich jak SQL Server Management Studio (SSMS) lub Azure Data Studio.
Podsumowanie
Program SQL Server 2025 dodaje JSON_ARRAYAGG, JSON_OBJECTAGG oraz STRING_CONCAT_WS, co upraszcza tworzenie tekstu strukturalnego i danych wyjściowych JSON w języku T-SQL. Te funkcje umożliwiają generowanie danych gotowych do aplikacji na podstawie zapytań bez kodu zewnętrznego. Niezależnie od tego, czy przygotowujesz ładunki JSON, konstruujesz raporty, czy formatujesz odpowiedzi interfejsu API, te funkcje agregacji sprawiają, że program SQL Server 2025 jest bardziej wszechstronną platformą dla nowoczesnych aplikacji danych.