كيفية إرجاع أعمدة SQL Server 2005/2008 كأعداد متطابقة للطفل باستخدام استعلام XML؟

StackOverflow https://stackoverflow.com/questions/2121740

سؤال

في الأساس ، أحتاج إلى إرجاع بعض البيانات من جدول خادم SQL بتنسيق XML التالي:

<querydata>
  <entity name="Person.Contact">
    <row>
      <field name="FirstName">Gustavo</field>
      <field name="LastName">Achong</field>
    </row>
    <row>
      <field name="FirstName">Catherine</field>
      <field name="LastName">Abel</field>
    </row>
...
  </entity>
</querydata>

لقد توصلت إلى بيان SQL التالي:

select 'Person.Contact' as "@name", 
(select FirstName, LastName from Person.Contact for XML path('row'), TYPE)
for XML path('entity'), root('querydata')

الذي ينتج هذا الإخراج:

<querydata>
  <entity name="Person.Contact">
    <row>
      <FirstName>Gustavo</FirstName>
      <LastName>Achong</LastName>
    </row>
    <row>
      <FirstName>Catherine</FirstName>
      <LastName>Abel</LastName>
    </row>
....
  </entity>
</querydata>

لكني لم أحصل على أبعد من ذلك. شكرًا!

هل كانت مفيدة؟

المحلول 2

شكرا جزيلا لك روب! بالتأكيد حصلت لي على المسار الصحيح ، +1 لك! اضطررت إلى لف كل شيء في SELECT * من العبارة ، وإلا فإن SQL Server يشكو. هنا هو استعلام العمل النهائي:

SELECT 'Person.Contact' as "@name",
(SELECT 
    (SELECT * from (SELECT 'FirstName' as [@name], [FirstName] as [*]
    union all
    SELECT 'LastName' as [@name], [LastName] as [*]) y
    for xml path('field'), TYPE)
from Person.Contact for XML path, TYPE)
for XML path('entity'), root('querydata')

نصائح أخرى

تحتاج إلى إلغاء تفسير بياناتك.

حاول استخدام مسمة فرعية على غرار:

SELECT 'FirstName' as [@name], FirstName as [*]
union all
SELECT 'LastName' as [@name], LastName as [*]
for xml path('field')

أو شيء من هذا القبيل ...

ليس لدي SQL معي (على جهاز iPhone الخاص بي اليوم) ، لكنني أفكر في:

select 'Person.Contact' as "@name", 
(select (SELECT 'FirstName' as [@name], FirstName as [*]
union all
SELECT 'LastName' as [@name], LastName as [*]
for xml path('field')) from Person.Contact for XML path('row'), TYPE)
for XML path('entity'), root('querydata')
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top