JSON และการรวมสตริง

เสร็จสมบูรณ์เมื่อ

SQL Server 2025 แนะนําฟังก์ชันการรวมใหม่สําหรับการสร้างอาร์เรย์ JSON, วัตถุ JSON และสตริงที่คั่น การเพิ่มเหล่านี้ทําให้ง่ายต่อการสร้างเอาต์พุตที่มีโครงสร้าง เช่น การตอบกลับ API รายงาน หรือการส่งออกบันทึกโดยตรงจากการค้นหา T-SQL ฟังก์ชันใหม่ช่วยให้คุณสามารถย้ายการจัดรูปแบบข้อมูลไปยังเลเยอร์ฐานข้อมูล ซึ่งช่วยลดความจําเป็นในการแปลงฝั่งไคลเอ็นต์ที่ซับซ้อน

ภาพรวมของฟังก์ชัน JSON และการรวมสตริง

ลองดูฟังก์ชันการรวมใหม่สามฟังก์ชัน:

JSON_ARRAYAGG

สร้างอาร์เรย์ JSON จากค่าของนิพจน์ ค่าของแต่ละแถวจะกลายเป็นองค์ประกอบในอาร์เรย์ JSON ที่เป็นผลลัพธ์ ช่วยลดความยุ่งยากในการสร้างอาร์เรย์ของค่า เช่น รายการรหัสหรือชื่อ

JSON_OBJECTAGG

สร้างออบเจ็กต์ JSON จากคู่คีย์-ค่า อาร์กิวเมนต์แรกกําหนดคีย์ และอาร์กิวเมนต์ที่สองกําหนดค่า การจับคู่ค่านี้ทําให้ง่ายต่อการสร้างเอกสาร JSON โดยตรงจากผลลัพธ์การสืบค้น

STRING_CONCAT_WS

เชื่อมต่อสตริงด้วยตัวคั่นที่ระบุในขณะที่ข้ามค่า NULL ชื่อของฟังก์ชันย่อมาจาก String CONCAT With Separator เป็นวิธีที่มีประสิทธิภาพในการรวมค่าต่างๆ เช่น ชื่อ แท็ก หรือรายการที่คั่นด้วยจุลภาค

ตัวดําเนินการการต่อสตริง ||

SQL Server 2025 แนะนําตัวดําเนินการมาตรฐาน || ANSI เป็นทางเลือกแทน + การต่อสายอักขระ มีไวยากรณ์แบบพกพามากขึ้นและมักเป็นที่ต้องการเมื่อรวมหลายคอลัมน์เป็นเอาต์พุตข้อความเดียว

ฟังก์ชัน UNISTR

UNISTR() ส่งกลับสตริง Unicode ตามลําดับการหลบหนี ทําให้คุณสามารถแทรกอักขระตามจุดรหัสหรือสัญกรณ์ 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;

ผลลัพธ์

รหัสลูกค้า ชื่อลูกค้า สรุปลูกค้า
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;

ผลลัพธ์

รหัสลูกค้า ชื่อลูกค้า ผลิตภัณฑ์ที่ซื้อ
11001 จอร์แดน แพตเตอร์สัน Touring-2000 สีน้ําเงิน, 50, Mountain-100 Black, 44
11002 อลิเซีย ทราน Road-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

Summary

SQL Server 2025 เพิ่ม JSON_ARRAYAGG, JSON_OBJECTAGGและ STRING_CONCAT_WS เพื่อลดความซับซ้อนของการสร้างข้อความที่มีโครงสร้างและเอาต์พุต JSON ภายใน T-SQL ฟังก์ชันเหล่านี้ช่วยให้คุณสร้างข้อมูลที่พร้อมใช้งานแอปพลิเคชันจากคิวรีโดยไม่ต้องใช้โค้ดภายนอก ไม่ว่าคุณจะเตรียมเพย์โหลด JSON สร้างรายงาน หรือจัดรูปแบบการตอบสนอง API คุณลักษณะการรวมเหล่านี้ทําให้ SQL Server 2025 เป็นแพลตฟอร์มที่หลากหลายมากขึ้นสําหรับแอปพลิเคชันข้อมูลสมัยใหม่