باستخدام XML Auto مقابل مرادف
-
27-09-2019 - |
سؤال
لقد تحولنا فقط إلى مرادفات لأشياء الخادم المرتبطة ، ولاحظنا أن إخراج XML الخاص بنا لم يعد صحيحًا. عند إرجاع نتائج XML من عرض ما ، يمكننا الاسم المستعار في العرض وسيتم تعيينه كاسم العنصر. مع المرادفات ، ومع ذلك ، يبدو أنه يتجاهل الاسم المستعار؟ ما زلنا في الغالب في SQL 2005 - لا يبدو أن هذا الخطأ يحدث في مثيلنا لعام 2008. هل هذه مشكلة معروفة ، وأي أفكار لعلاج العمل؟
على سبيل المثال ، هذا ما اعتدنا أن نكون قادرين على القيام به:
select top 3 number from Numbers as elementname for xml auto
<elementname number="0"/><elementname number="1"/><elementname number="2"/>
وهذا ما يحدث مع مرادف:
select top 3 number from Numbers_synonym as elementname for xml auto
<dbo.Numbers number="0"/><dbo.Numbers number="1"/><dbo.Numbers number="2"/>
كما ترون ، يبدو أن SQL Server يستخدم اسم الكائن الفعلي المرجع بدلاً من الاسم المستعار. هذا يزداد سوءًا بالنسبة لاستفسارات الخادم المتقاطع ، لأنك تحصل على الاسم المكون من أربعة أجزاء بدلاً من الاسم المستعار الجميل. (على سبيل المثال: <rick_server.rick_database.dbo.Numbers number="0"/>
...)
المحلول
بعض الأحيان FOR XML AUTO
هل "الشيء الخطأ" - يمكنك التحكم في اسم عنصر XML إذا كنت تستخدم أكثر مطوّلة:
SELECT TOP 3 number
FROM Numbers_synonym
FOR XML PATH('elementname'), TYPE