আমার একটি টেবিল রয়েছে যাতে 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()
অ্যাগ্রিগেশন। তবে আপাতত আমি একটি এক্সএমএল কলামটি জিজ্ঞাসা করার চেষ্টা করছি ।
সিউডো কোডে, আমি এরকম কিছু চেষ্টা করব:
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
তবে যে এসকিউএল ক্যোয়ারি কাজ করে না:
Msg 2396, স্তর 16, রাজ্য 1, লাইন 2
এক্সকিউরি [Sqm.data.query ()]: বৈশিষ্ট্য কোনও উপাদানের বাইরে উপস্থিত নাও হতে পারে
আমি শিকার করেছি, এবং এক্সএমএল অনুসন্ধান করা কতটা দুর্বল নথিভুক্ত বা নমুনাযুক্ত তা আশ্চর্যজনক। একটি সারণী জিজ্ঞাসা না করে বেশিরভাগ সংস্থানসমূহ , একটি ভেরিয়েবলকে জিজ্ঞাসা করে ; যা আমি করছি না বেশিরভাগ সংস্থানগুলি মান পড়ার পরিবর্তে কেবল ফিল্টারিং এবং নির্বাচনের জন্য এক্সএমএল ক্যোয়ারিং ব্যবহার করে। বেশিরভাগ সংস্থান প্রকৃত মানগুলির চেয়ে হার্ড-কোডড চাইল্ড নোডগুলি (সূচক অনুসারে) পড়ে।
সম্পর্কিত রিসোর্স যা আমি পড়ি
- /programming/966441/xML-query-in-sql-server-2008
- একটি উপাদান মানের জন্য এসকিউএল সার্ভার ক্যোয়ারী এক্সএমএল বৈশিষ্ট্য
- এসকিউএল XML বৈশিষ্ট্য অনুসন্ধান করছে
- এসকিউএল সার্ভার 2005 এক্সকিউরি এবং এক্সএমএল-ডিএমএল - পার্ট 1
- বিওএল: মাইক্রোসফ্ট এসকিউএল সার্ভার 2005-এ এক্সএমএল সমর্থন
- এসকিউএল সার্ভারে এক্সএমএল অনুসন্ধান করা হচ্ছে
- বেসিক এসকিউএল সার্ভার এক্সএমএল অনুসন্ধান
- বিওএল: ক্যোয়ারী () পদ্ধতি (এক্সএমএল ডেটা প্রকার)
- এক্সএমএল ওয়ার্কশপ ভি - এক্সএমএল কলামগুলি থেকে মান পড়া
- এসকিউএল সার্ভার - এক্সএমএল ডেটা টাইপ পদ্ধতি আবিষ্কারের ভূমিকা - একটি প্রাইমার
আপডেট: .কোয়ারীর পরিবর্তে মূল্য
.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 এক্সকিউরি [স্কয়ার.ডাটা.ভ্যালু ()]:
'মান ()' এর জন্য একটি সিঙ্গলটন (বা খালি অনুক্রম) প্রয়োজন, 'এক্সডিটি: অব টাইপড অ্যাটমিক *' টাইপের অপারেন্ড পাওয়া গেছে
select m.*
এটি নির্মিত গোপন, যাদুকরী, মধ্যবর্তী টেবিল দেখার কোনও উপায় নেই বলে মনে হয় । কোনও উপাদানটির মান জিজ্ঞাসা করার সিনট্যাক্সটি কী? যেমন এর মান<Metric>8675309</Metric>
হয় "8675309"