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 เป็นแพลตฟอร์มที่หลากหลายมากขึ้นสําหรับแอปพลิเคชันข้อมูลสมัยใหม่