พื้นหลัง ฉันต้องการ XML คอลัมน์ในภาษา sql ของฉันโต๊ะ(ใช้ภาษา sql เซิร์ฟเวอร์). แต่ละจุดเชื่อมต่อคนต่างออกจำนวนมากของข้อมูลกำกับภาพ. ตัวอย่างเช่น,อยู่ด้านล่างตัวอย่างเช่นขั้นตอเบอร์ 1 มีเพียงคำว่า"ไม่"เป็นข้อมูลกำกับภาพขณะที่ก้าวหมายเลข 2 ยิ่งไปกว่านั้นมี RBuffer.
<Step No="1" >Step Number 1</Step>
<Step No="2" RBuffer="6000">Step Number 2</Step>
<Step No="3" Macro="5">Step Number 3</Step>
คาดหวังผลส่งออก
ฉันอยากจะดึงข้อมูลกำกับภาพนี้ dynamically ในขณะที่ยังพอจะเอาติดกลับไปค่า. สำหรับตัวอย่างอยู่เหนือมันคงดูเหมือนใต้โต๊ะ อย่างที่สำคัญมันไม่สำคัญหรอกกี่ข้อมูลกำกับภาพป้ายกำกับมัน,ฉันต้องการให้มันผ่านไปพวกเขาทั้งหมด บางอย่างของข้อมูลของ 10+อยากจะคิดถึงเรื่องนั้นเลย
โหนด | ขั้น | กุญแจ | ค่า |
---|---|---|---|
ขั้น | 1 | ค่า | ขั้นเบอร์ 1 |
ขั้น | 2 | RBuffer | 6000 |
ขั้น | 2 | ค่า | ขั้นที่หมายเลข 2 |
ขั้น | 3 | มาโคร | 5 |
ขั้น | 3 | ค่า | ขั้นเบอร์ 3 |
ทำงานตอนนี้
ถึงตอนนี้ฉันสามารถแยกข้อมูลกำกับภาพในรูปแบบทาง:
SELECT o.value('@No', 'varchar(32)') [Step]
,o.value('@Macro', 'varchar(32)') [Macro]
,o.value('@RBuffer', 'varchar(32)') [RBuffer]
,o.value('(text())[1]', 'varchar(32)') [Action]
FROM [dbo].[dw_mrd_vss_rundetail_stg] S
CROSS APPLY S.[rundata_detail].nodes('Step') xmlData(o)
ซึ่งทำให้คนตามโต๊ะ:
ขั้น | มาโคร | RBuffer | การกระทำ |
---|---|---|---|
1 | โพรโทคอล aimcomment | โพรโทคอล aimcomment | ขั้นเบอร์ 1 |
2 | โพรโทคอล aimcomment | 6000 | ขั้นที่หมายเลข 2 |
3 | 5 | โพรโทคอล aimcomment | ขั้นเบอร์ 3 |
แต่ฉันต้องในข้อบังคับของโทรหากันและค่าและสร้างคอลัมน์ในทางที่ไม่ใช่ scalable. ที่เขาแนะนำให้ผูกผ้ากันเปื้อนจะเป็นเกียรติอย่างยิ่ง ฉันค่อนข้างใหม่ต้องการข้อมูล munging ในภาษา sql ดังนั้นคำอธิบายได้หลายทางของรหัสคงต้องการความช่วยเหลือเห.