Kod JSON i agregacja ciągów

Zakończone

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.