JSON- und Zeichenfolgenaggregation

Abgeschlossen

SQL Server 2025 führt neue Aggregationsfunktionen zum Erstellen von JSON-Arrays, JSON-Objekten und durch Trennzeichen getrennten Zeichenfolgen ein. Diese Ergänzungen erleichtern das Generieren strukturierter Ausgaben wie API-Antworten, Berichte oder Protokollexporte direkt aus T-SQL-Abfragen. Mit den neuen Funktionen können Sie die Datenformatierung in die Datenbankebene verschieben, wodurch die Notwendigkeit komplexer clientseitiger Transformationen reduziert wird.

Übersicht über JSON- und Zeichenfolgenaggregationsfunktionen

Sehen wir uns die drei neuen Aggregationsfunktionen an:

JSON_ARRAYAGG

Erstellt ein JSON-Array aus den Werten eines Ausdrucks. Jeder Zeilenwert wird zu einem Element im resultierenden JSON-Array. Es vereinfacht das Generieren von Arrays von Werten wie Listen von IDs oder Namen.

JSON_OBJECTAGG

Erstellt ein JSON-Objekt aus Schlüssel-Wert-Paaren. Das erste Argument definiert den Schlüssel, und der zweite definiert den Wert. Diese Wertpaarung erleichtert das Erstellen von JSON-Dokumenten direkt aus Abfrageergebnissen.

STRING_CONCAT_WS

Verkettet Zeichenfolgen mit einem angegebenen Trennzeichen, während NULL-Werte übersprungen werden. Der Name der Funktion steht für String CONCAT With Separator. Sie bietet eine effiziente Möglichkeit, Werte wie Namen, Tags oder durch Trennzeichen getrennte Listen zu verbinden.

Zeichenfolgenverkettungsoperator ||

SQL Server 2025 führt den ANSI-Standardoperator || als Alternative zu + zur Zeichenfolgenverkettung ein. Es bietet eine tragbarere Syntax und wird häufig bevorzugt, wenn mehrere Spalten in einer einzelnen Textausgabe kombiniert werden.

UNISTR-Funktion

UNISTR() gibt eine auf Escape-Sequenzen basierende Zeichenfolge im Unicode-Format zurück, mit der Sie Zeichen nach Code-Punkt oder Escape-Notation einfügen können. Es ist nützlich, wenn Skripts erstellt werden, die nicht druckbare oder mehrsprachige Zeichen enthalten.

Beispiel 1: Erstellen von JSON-Arrays und -Objekten aus Abfrageergebnissen

Stellen Sie sich vor, Ihre Datenbank speichert Kundenauftragsdaten in zwei Tabellen, Sales.Customer und Sales.SalesOrderHeader. Das Analyseteam benötigt einen JSON-Bericht, in dem jeder Kunde und seine Auftrags-IDs für die Integration in ein Webdashboard zusammengefasst werden.

Abfrage: Verwenden von JSON_ARRAYAGG und JSON_OBJECTAGG

Die folgende Abfrage ruft jeden Kunden zusammen mit einem JSON-Array ihrer Bestell-IDs ab, die in ein JSON-Objekt eingeschlossen sind.

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;

Ergebnisse

Kunden-ID Kundenname Kundenzusammenfassung
11001 Jordan Patterson {"Customer":11001,"Orders":[43722,43723,43724]}
11002 Alicia Tran {"Customer":11002,"Orders":[43725,43726]}
11003 Marco Diaz {"Customer":11003,"Orders":[43727]}

In diesem Beispiel sammelt JSON_ARRAYAGG alle Auftrags-IDs für jeden Kunden in einem JSON-Array, und JSON_OBJECTAGG umschließt das Ergebnis in einem JSON-Objekt mit unverschlüsselten Schlüssel-Wert-Paaren. Die gesamte Struktur wird in einer T-SQL-Abfrage erstellt.

Beispiel 2: Formatieren der Textausgabe mithilfe von STRING_CONCAT_WS

Das Marketingteam benötigt eine Liste der gekauften Produktnamen jedes Kunden, die durch Kommas für eine E-Mail-Kampagne getrennt sind. Die STRING_CONCAT_WS Funktion kann diese Ergebnisse sauber generieren, wobei alle NULL-Werte weggelassen werden.

Abfrage: Hinzufügen von Produktnamen mit einem Trennzeichen

Die folgende Abfrage ruft jeden Kunden zusammen mit einer durch Trennzeichen getrennten Liste der von ihnen erworbenen Produkte ab.

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;

Ergebnisse

Kunden-ID Kundenname GekaufteProdukte
11001 Jordan Patterson Touren-2000 Blau, 50, Berg-100 Schwarz, 44
11002 Alicia Tran Straße-250 Gelb, 44, Berg-200 Rot, 48
11003 Marco Diaz Touren-3000 Blau, 62

Hier verknüpft STRING_CONCAT_WS Produktnamen mit Kommas und ignoriert NULL-Einträge automatisch, wodurch manuelle COALESCE- oder ISNULL-Logik vermieden wird.

Beispiel 3: Kombinieren von JSON und durch Trennzeichen getrennten Text für die API-Ausgabe

Sie können diese Funktionen auch zusammen verwenden, um strukturierte Daten für eine API-Antwort vorzubereiten. Die folgende Abfrage erstellt ein JSON-Array von Objekten, in denen jedes Objekt den Namen und die durch Trennzeichen getrennte Produktliste eines Kunden enthält.

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;

Ergebnisbeispiel

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

Eine Anwendung verwendet diese Struktur direkt oder exportiert sie als JSON-Dokument über Tools wie SQL Server Management Studio (SSMS) oder Azure Data Studio.

Zusammenfassung

SQL Server 2025 fügt JSON_ARRAYAGG, JSON_OBJECTAGG und STRING_CONCAT_WS hinzu, um das Erstellen von strukturiertem Text und JSON-Ausgaben in T-SQL zu vereinfachen. Mit diesen Funktionen können Sie anwendungsbereite Daten aus Abfragen ohne externen Code generieren. Ganz gleich, ob Sie JSON-Nutzlasten vorbereiten, Berichte erstellen oder API-Antworten formatieren, diese Aggregationsfeatures machen SQL Server 2025 zu einer vielseitigeren Plattform für moderne Datenanwendungen.