الاستعلام عن حقل XML's Elmah
-
26-09-2019 - |
سؤال
يستخدم جدول ELMAH_ERROR سهم حقل NTEXT لتخزين إدخال خطأ. لقد وجدت أنه بإضافة حقل من النوع XML ؛ ثم إضافة هذا الحقل الجديد إلى بيان إدراج Sproc الذي يملأ الحقل ؛ يمكنني الاستفادة بشكل أفضل من إخراج Elmah.
الآن أود أن أتعلم كيفية الاستعلام عن قيم العناصر المحددة ضمن حقل XML هذا. المستند منظم على النحو التالي:
<error [...]>
<serverVariables>
<item name="ALL_HTTP">
<value string="..." />
</item>
<item name="ALL_RAW">
<value string="..." />
</item>
.
.
.
</serverVariables>
</error>
أحتاج إلى أن أكون قادرًا على الاستعلام عن قيمة عناصر محددة تحتها.
لذلك أنا أنظر إلى مثال من 15Seconds.com مقالة - سلعة:
SELECT MyXml.value('(/root/product[@id="304"]/name)[1]', 'nvarchar(30)')
وأنا أحاول تعيين هذه القيم إلى بنية حقل بلدي - لكن لا يمكنني ذلك. على سبيل المثال
select top 10 RealXML.value('(/error/serverVariables[@id="REMOTE_HOST"]/name)[0]', 'nvarchar(30)')
حيث يتم تنسيق Remote_host:
<item name="REMOTE_HOST">
<value string="55.55.55.55" />
</item>
مقدر جدا
المحلول
هذا يجب أن يعمل:
select top 10 RealXML.value('(/error/serverVariables/item[@name="REMOTE_HOST"]/value/@string)[1]', 'nvarchar(30)')
تم اختباره باستخدام ما يلي:
DECLARE @xml XML = '
<error>
<serverVariables>
<item name="ALL_HTTP">
<value string="..." />
</item>
<item name="ALL_RAW">
<value string="..." />
</item>
<item name="REMOTE_HOST">
<value string="55.55.55.55" />
</item>
</serverVariables>
</error>
'
SELECT @xml.value('(/error/serverVariables/item[@name="REMOTE_HOST"]/value/@string)[1]','nvarchar(30)')
لا تنتمي إلى StackOverflow