วิธีที่ง่ายที่สุดในการแก้ไขรายการเดียวในคอลัมน์ XML?


9

เนื่องจากฉันเข้าใจ MS SQL Server Management Studio ไม่อนุญาตให้แก้ไข / แทนที่รายการในคอลัมน์ XML ผ่าน GUI โดยตรง (คัดลอก / วางไม่ทำงาน ฯลฯ )

ตัวเลือกที่ง่ายที่สุดในการแทนที่รายการเดียวในคอลัมน์ XML คืออะไร ฉันต้องใช้สิ่งที่แตกต่างจาก UPDATE / REPLACE สำหรับค่าคอลัมน์ XML หรือไม่

คำตอบ:


22

หากคุณต้องการแทนที่ชิ้นส่วนทั้งหมดของ XML ในครั้งเดียวคุณสามารถทำการอัปเดตตามปกติเช่นบางสิ่งเช่นนี้:

UPDATE yourTable
SET yourXML = '<yourNewValidXML/>' 
WHERE rowId = 1

หากคุณต้องการแก้ไขแอตทริบิวต์หรือองค์ประกอบแต่ละรายการคุณสามารถใช้วิธีการ. modify ของชนิดข้อมูล XML ใน SQL Server เพื่ออัปเดตค่าเดียว นี่เป็นตัวอย่างง่ายๆที่จะช่วยให้คุณเริ่มต้น:

DECLARE @t TABLE ( rowId INT IDENTITY PRIMARY KEY, yourXML XML )

INSERT INTO @t ( yourXML )
VALUES ( '<Users>
    <User Name="Bob"></User>
    <User Name="Mikhail"></User>
    <User Name="John"></User>
    <User Name="Sue"></User>
</Users>' )

SELECT 'before' s, DATALENGTH(yourXML) dl, yourXML
FROM @t
WHERE rowId = 1

-- Update one attribute
UPDATE @t
SET yourXML.modify('replace value of (Users/User/@Name[.="Bob"])[1] with "wBob"')
WHERE rowId = 1

SELECT 'after' s, DATALENGTH(yourXML) dl, yourXML
FROM @t
WHERE rowId = 1

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.