سؤال

لدي جدول بهيكل مثل ما يلي:

------------------------------
LocationID     | AccountNumber
------------------------------
long-guid-here | 12345
long-guid-here | 54321

للانتقال إلى إجراء مخزن آخر، أحتاج إلى أن يبدو XML بالشكل التالي:

<root> 
    <clientID>12345</clientID>
    <clientID>54321</clientID>
</root>

أفضل ما تمكنت من فعله حتى الآن هو الحصول على هذا النحو:

<root clientID="10705"/>

أنا أستخدم عبارة SQL هذه:

SELECT
    1 as tag,
    null as parent,
    AccountNumber as 'root!1!clientID'
FROM
    Location.LocationMDAccount
WHERE
    locationid = 'long-guid-here'
FOR XML EXPLICIT

لقد ألقيت نظرة على الوثائق حتى الآن صفحة MSDN, ، ولكني لم أخرج بالنتائج المرجوة.


@كلغ،

لقد أعطاني لك هذا الإخراج في الواقع:

<root>
  <Location.LocationMDAccount>
    <clientId>10705</clientId>
  </Location.LocationMDAccount>
</root>

انا ذاهب الى العصا مع FOR XML EXPLICIT من كريس ليون في الوقت الراهن.

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

المحلول

يحاول

SELECT
    1 AS Tag,
    0 AS Parent,
    AccountNumber AS [Root!1!AccountNumber!element]
FROM
    Location.LocationMDAccount
WHERE
    LocationID = 'long-guid-here'
FOR XML EXPLICIT

نصائح أخرى

جرب هذا يا كريس:

SELECT
    AccountNumber as [clientId]
FROM
    Location.Location root
WHERE
    LocationId = 'long-guid-here'
FOR
    XML AUTO, ELEMENTS

متأسف للغاية!لقد خلطت ما كنت تسأل عنه.أفضّل XML AUTO فقط لسهولة الصيانة، ولكن أعتقد أن أيًا منهما فعال.وأعتذر عن الإطاله ;-)

باستخدام SQL Server 2005 (أو من المفترض 2008) أجد أن XML PATH يسمح بصيانة SQL بشكل أسهل بكثير من XML Explicit (خاصة عندما يصبح SQL أطول).

في هذه الحالة:

SELECT AccountNumber as "clientID"
FROM Location.LocationMDAccount
WHERE locationid = 'long-guid-here'
FOR XML PATH (''), Root ('root');

حصلت عليه مع:

select
1 as tag,
null as parent,
AccountNumber as 'root!1!clientID!element'
from
Location.LocationMDAccount
where
locationid = 'long-guid-here'
for xml explicit
SELECT 1             as tag,
       null          as parent,
       AccountNumber as 'clientID!1!!element'
FROM Location.LocationMDAccount
WHERE locationid = 'long-guid-here'
FOR XML EXPLICIT, root('root')
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top