ฉันมีตารางที่ประกอบด้วยXml
คอลัมน์:
SELECT *
FROM Sqm
ตัวอย่างxml
ข้อมูลของแถวจะเป็น:
<Sqm version="1.2">
<Metrics>
<Metric id="TransactionCleanupThread.RecordUsedTransactionShift" type="timer" unit="µs" count="1" sum="21490" average="21490" minValue="73701" maxValue="73701" >73701</Metric>
<Metric id="TransactionCleanupThread.RefundOldTrans" type="timer" unit="µs" count="1" sum="184487" average="184487" minValue="632704" maxValue="632704" >632704</Metric>
<Metric id="Database.CreateConnection_SaveContextUserGUID" type="timer" unit="µs" count="2" sum="7562" average="3781" minValue="12928" maxValue="13006" standardDeviation="16" >12967</Metric>
<Metric id="Global.CurrentUser" type="timer" unit="µs" count="6" sum="4022464" average="670411" minValue="15" maxValue="13794345" standardDeviation="1642047">2299194</Metric>
<Metric id="Global.CurrentUser_FetchIdentityFromDatabase" type="timer" unit="µs" count="1" sum="4010057" average="4010057" minValue="13752614" maxValue="13752614" >13752614</Metric>
</Metrics>
</Sqm>
ในกรณีของข้อมูลนี้ฉันต้องการ:
SqmId id type unit count sum minValue maxValue standardDeviation Value
===== =================================================== ===== ==== ===== ====== ======== ======== ================= ======
1 TransactionCleanupThread.RecordUsedTransactionShift timer µs 1 21490 73701 73701 NULL 73701
1 TransactionCleanupThread.RefundOldTrans timer µs 1 184487 632704 632704 NULL 632704
1 Database.CreateConnection_SaveContextUserGUID timer µs 2 7562 12928 13006 16 12967
1 Global.CurrentUser timer µs 6 4022464 15 13794345 1642047 2299194
1 Global.CurrentUser_FetchIdentityFromDatabase timer µs 1 4010057 13752614 13752614 NULL 13752614
2 ...
ในท้ายที่สุดผมจะได้รับการปฏิบัติจริงSUM()
, MIN()
, MAX()
รวม แต่ตอนนี้ฉันแค่พยายามค้นหาคอลัมน์ xml
ในรหัสหลอกฉันจะลองทำสิ่งต่างๆเช่น:
SELECT
SqmId,
Data.query('/Sqm/Metrics/Metric/@id') AS id,
Data.query('/Sqm/Metrics/Metric/@type') AS type,
Data.query('/Sqm/Metrics/Metric/@unit') AS unit,
Data.query('/Sqm/Metrics/Metric/@sum') AS sum,
Data.query('/Sqm/Metrics/Metric/@count') AS count,
Data.query('/Sqm/Metrics/Metric/@minValue') AS minValue,
Data.query('/Sqm/Metrics/Metric/@maxValue') AS maxValue,
Data.query('/Sqm/Metrics/Metric/@standardDeviation') AS standardDeviation,
Data.query('/Sqm/Metrics/Metric') AS value
FROM Sqm
แต่แบบสอบถาม SQL นั้นไม่ทำงาน:
ข่าวสารเกี่ยวกับ 2396 ระดับ 16 สถานะ 1 บรรทัด 2
XQuery [Sqm.data.query ()]: แอตทริบิวต์อาจไม่ปรากฏภายนอกองค์ประกอบ
ฉันได้ล่าสัตว์และมันน่าทึ่งมากที่การสืบค้น Xml มีเอกสารหรือตัวอย่าง ทรัพยากรส่วนใหญ่มากกว่าสอบถามตารางแบบสอบถามตัวแปร ; ซึ่งฉันไม่ได้ทำ ทรัพยากรส่วนใหญ่ใช้เฉพาะการสืบค้น xml สำหรับการกรองและการเลือกแทนที่จะอ่านค่า ทรัพยากรส่วนใหญ่อ่านโหนดชายด์แบบฮาร์ดโค้ด (ตามดัชนี) แทนที่จะเป็นค่าจริง
แหล่งข้อมูลที่เกี่ยวข้องที่ฉันอ่าน
- /programming/966441/xml-query-in-sql-server-2008
- แอตทริบิวต์ xml เคียวรี SQL Server สำหรับค่าองค์ประกอบ
- SQL เคียวรีแอ็ตทริบิวต์ XML
- SQL Server 2005 XQuery และ XML-DML - ส่วนที่ 1
- BOL: รองรับ XML ใน Microsoft SQL Server 2005
- การสืบค้น XML ใน SQL Server
- การสอบถาม XML ของเซิร์ฟเวอร์ SQL พื้นฐาน
- BOL: query () วิธีการ (ชนิดข้อมูล xml)
- XML Workshop V - การอ่านค่าจากคอลัมน์ XML
- SQL SERVER - ข้อมูลเบื้องต้นเกี่ยวกับการค้นพบวิธีการประเภทข้อมูล XML - ไพรเมอร์
อัปเดต: .value แทนที่จะเป็น. แบบสอบถาม
ฉันลองสุ่มโดยใช้.value
แทน.query
:
SELECT
Sqm.SqmId,
Data.value('/Sqm/Metrics/Metric/@id', 'varchar(max)') AS id,
Data.value('/Sqm/Metrics/Metric/@type', 'varchar(max)') AS type,
Data.value('/Sqm/Metrics/Metric/@unit', 'varchar(max)') AS unit,
Data.value('/Sqm/Metrics/Metric/@sum', 'varchar(max)') AS sum,
Data.value('/Sqm/Metrics/Metric/@count', 'varchar(max)') AS count,
Data.value('/Sqm/Metrics/Metric/@minValue', 'varchar(max)') AS minValue,
Data.value('/Sqm/Metrics/Metric/@maxValue', 'varchar(max)') AS maxValue,
Data.value('/Sqm/Metrics/Metric/@standardDeviation', 'varchar(max)') AS standardDeviation,
Data.value('/Sqm/Metrics/Metric', 'varchar(max)') AS value
FROM Sqm
แต่ก็ไม่ได้ผล:
ข่าวสารเกี่ยวกับ 2389 ระดับ 16 สถานะ 1 บรรทัด 3 XQuery [Sqm.data.value ()]:
'value ()' ต้องการซิงเกิลตัน (หรือลำดับว่าง) พบตัวถูกดำเนินการประเภท 'xdt: untypedAtomic *'
select m.*
จะเห็นความลับที่มีมนต์ขลังและโต๊ะกลางที่สร้างขึ้น ไวยากรณ์ในการสืบค้นค่าขององค์ประกอบคืออะไร? เช่นค่า<Metric>8675309</Metric>
เป็น"8675309"