צבירת JSON ומחרוזות

הושלם

SQL Server 2025 מציג פונקציות צבירה חדשות לבניית מערכי JSON, אובייקטי JSON ומחרוזות מופרדות. תוספות אלו מקלות על יצירת פלט מובנה כגון תגובות API, דוחות או ייצוא יומן ישירות משאילתות T-SQL. הפונקציות החדשות מאפשרות לך להעביר עיצוב נתונים לשכבת מסד הנתונים, ובכך להפחית את הצורך בהמרה מורכבת מצד הלקוח.

מבט כולל על פונקציות צבירת JSON ומחרוזות

בוא נבחן את שלוש פונקציות הצבירה החדשות:

JSON_ARRAYAGG

יצירת מערך JSON מערכי ביטוי. הערך של כל שורה הופך לרכיב במערך ה- JSON שנוצר. זה מפשט את יצירת מערכי הערכים כגון רשימות של מזהים או שמות.

JSON_OBJECTAGG

יוצר אובייקט JSON מזוגות מפתח-ערך. הארגומנט הראשון מגדיר את המפתח, והשני מגדיר את הערך. צימוד ערכים זה מקל על בניית מסמכי JSON ישירות מתוצאות השאילתה.

STRING_CONCAT_WS

שרשור מחרוזות עם מפריד שצוין תוך דילוג על ערכי NULL. שם הפונקציה מייצג מחרוזת CONCAT עם מפריד. הוא מספק דרך יעילה לצרף ערכים כגון שמות, תגים או רשימות המופרדות בפסיקים.

אופרטור שרשור מחרוזות ||

SQL Server 2025 מציג את האופרטור בתקן || ANSI כחלופה לשרשור + מחרוזות. הוא מספק תחביר נייד יותר ולעתים קרובות מועדף בעת שילוב עמודות מרובות לפלט טקסט יחיד.

הפונקציה UNISTR

UNISTR() החזרת מחרוזת Unicode המבוססת על רצפי escape, המאפשרת לך להוסיף תווים לפי נקודת קוד או סימון escape. אפשרות זו שימושית בעת כתיבת סקריפטים הכוללים תווים שאינם ניתנים להדפסה או תווים רב-לשוניים.

דוגמה 1: בניית מערכי JSON ואובייקטים מתוצאות שאילתה

תאר לעצמך שמסד הנתונים שלך מאחסן נתוני הזמנות של לקוחות בשתי טבלאות, Sales.Customer ו Sales.SalesOrderHeader- . צוות הניתוח זקוק לדוח JSON המסכם כל לקוח ומזהי ההזמנות שלו לצורך אינטגרציה עם לוח מחוונים אינטרנטי.

שאילתה: שימוש ב- JSON_ARRAYAGG וב- JSON_OBJECTAGG

השאילתה הבאה מאחזרת כל לקוח יחד עם מערך JSON של מזהי ההזמנות שלו, עטופים באובייקט 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;

Results

מזהה לקוח שם לקוח סיכום לקוח
11001 ג'ורדן פטרסון {"לקוח":11001,"הזמנות":[43722,43723,43724]}
11002 אליסיה טראן {"לקוח":11002,"הזמנות":[43725,43726]}
11003 מרקו דיאז {"לקוח":11003,"הזמנות":[43727]}

בדוגמה זו, JSON_ARRAYAGG אוסף את כל מזהי ההזמנה של כל לקוח למערך JSON, ועוטף JSON_OBJECTAGG את התוצאה באובייקט JSON עם זוגות מפתח-ערך ברורים. המבנה כולו מיוצר בשאילתת T-SQL אחת.

דוגמה 2: עיצוב פלט טקסט באמצעות STRING_CONCAT_WS

צוות השיווק זקוק לרשימה של שמות המוצרים שנרכשו על ידי כל לקוח מופרדים בפסיקים עבור קמפיין דואר אלקטרוני. הפונקציה STRING_CONCAT_WS יכולה להפיק תוצאות אלה בצורה נקייה, תוך השמטת ערכי NULL.

שאילתה: צירוף שמות מוצרים באמצעות מפריד

השאילתה הבאה מאחזרת כל לקוח יחד עם רשימה מופרדת בפסיקים של מוצרים שהוא רכש.

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

מזהה לקוח שם לקוח מוצריםנרכש
11001 ג'ורדן פטרסון Touring-2000 Blue, 50, Mountain-100 Black, 44
11002 אליסיה טראן כביש-250 צהוב, 44, הר-200 אדום, 48
11003 מרקו דיאז Touring-3000 כחול, 62

כאן, STRING_CONCAT_WS מצרף שמות מוצרים עם פסיקים ומתעלם מערכי NULL באופן אוטומטי, תוך הימנעות ידנית COALESCEאו ISNULL לוגיקה.

דוגמה 3: שילוב JSON וטקסט מופרד לפלט API

אפשר גם להשתמש בפונקציות האלה יחד כדי להכין נתונים מובנים לתגובת API. השאילתה הבאה יוצרת מערך JSON של אובייקטים שבו כל אובייקט מכיל שם לקוח ורשימת מוצרים המופרדת באמצעות פסיקים.

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;

דוגמה לתוצאה

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

יישום צורך מבנה זה ישירות או מייצא אותו כמסמך JSON באמצעות כלים כגון SQL Server Management Studio (SSMS) או Azure Data Studio.

תקציר

SQL Server 2025 מוסיף JSON_ARRAYAGG, JSON_OBJECTAGGוכדי STRING_CONCAT_WS לפשט את בניית פלט הטקסט וה- JSON המובנה בתוך T-SQL. פונקציות אלה מאפשרות לך להפיק נתונים מוכנים ליישום משאילתות ללא קוד חיצוני. בין אם אתה מכין מטענים של JSON, בונה דוחות או מעצב תגובות API, תכונות צבירה אלה הופכות את SQL Server 2025 לפלטפורמה רב-תכליתית יותר עבור יישומי נתונים מודרניים.