मैं डेटा को xml के रूप में लोड करने के लिए SQL सर्वर का उपयोग कर रहा हूं। मैं डेटा लोड करने के लिए वास्तविक कार्यान्वयन में काफी कुछ तालिकाओं का उपयोग कर रहा हूं।

चूंकि नीचे के रूप में अस्थायी तालिकाओं में कुछ डमी जोड़ना पुन: पेश करना आसान है

create table #T1(Id int, ItemName varchar(25))
create table #T2(ItemId int, ImagePath varchar(25))

Insert Into #T1
values (1, 'Item1'), (2, 'Item2')

Insert Into #T2
values (1, 'Path 1'), (1, 'Path 2'), (1, 'Path 3'),
       (2, 'Path 4'), (2, 'Path 5')

मैं नीचे के रूप में क्वेरी लिख रहा हूं (यह पुन: पेश करने के लिए एक सरलीकृत संस्करण है)

SELECT 
    'Some title' Title,
    (SELECT
         (SELECT * 
          FROM
              (SELECT 
                   *,
                   (SELECT TOP 2 ImagePath AS 'href'
                    FROM #T2 AS Image
                    WHERE Image.ItemId = ItinRow.Id
                    FOR XML PATH('Image'), ELEMENTS, TYPE) Images
                FROM 
                    #T1 ItinRow) AS ItinItemRow
          FOR XML PATH('Collections'), TYPE, ELEMENTS)
    FOR XML PATH(''), TYPE, ELEMENTS)                   
FROM 
    (SELECT *
     FROM #T1) ItinGroupPage
FOR XML PATH('Group'), ELEMENTS

जो इस XML संरचना को उत्पन्न करता है

 <Group>
  <Title>Some title</Title>
  <Collections>
    <Id>1</Id>
    <ItemName>Item1</ItemName>
    <Images>
      <Image>
        <href>Path 1</href>
      </Image>
      <Image>
        <href>Path 2</href>
      </Image>
    </Images>
  </Collections>
  <Collections>
    <Id>2</Id>
    <ItemName>Item2</ItemName>
    <Images>
      <Image>
        <href>Path 4</href>
      </Image>
      <Image>
        <href>Path 5</href>
      </Image>
    </Images>
  </Collections>
</Group>

मेरी समस्या इस छवि नोड के साथ है। जो मैं वास्तव में चाहता हूं वह छवि नोड के बिना नीचे कुछ आउटपुट करना है:

 <Group>
  <Title>Some title</Title>
  <Collections>
    <Id>1</Id>
    <ItemName>Item1</ItemName>    
      <Image>
        <href>Path 1</href>
      </Image>
      <Image>
        <href>Path 2</href>
      </Image>
  </Collections>
  <Collections>
    <Id>2</Id>
    <ItemName>Item2</ItemName>
      <Image>
        <href>Path 4</href>
      </Image>
      <Image>
        <href>Path 5</href>
      </Image>
  </Collections>
</Group>

लेकिन जब मैं इसे क्वेरी से निकालने का प्रयास करता हूं तो मुझे यह त्रुटि मिलती है:

'आइटम' के कॉलम 3 के लिए कोई कॉलम नाम निर्दिष्ट नहीं किया गया था

अपेक्षित एक्सएमएल संरचना प्राप्त करने का कोई तरीका है?

1
huMpty duMpty 22 फरवरी 2019, 20:34

1 उत्तर

सबसे बढ़िया उत्तर

मेरा मानना ​​​​है कि इस एसक्यूएल को जो आप ढूंढ रहे हैं उसे वापस करना चाहिए:

SELECT
    'Some title' AS 'Title',
    (SELECT 
         Id,
         ItemName,
         (SELECT ImagePath AS 'Image/href'
          FROM #T2
          WHERE #T2.ItemId = #T1.Id
          FOR XML PATH(''), TYPE)
      FROM 
          #T1
      FOR XML PATH('Collections'), TYPE)
FOR XML PATH(''), ROOT('Groups')

मेरे SQL सर्वर 2016 में, मैं आपके द्वारा प्रदान किए गए नमूना डेटा से यह XML वापस प्राप्त करता हूं:

<Groups>
  <Title>Some title</Title>
  <Collections>
    <Id>1</Id>
    <ItemName>Item1</ItemName>
    <Image>
      <href>Path 1</href>
    </Image>
    <Image>
      <href>Path 2</href>
    </Image>
    <Image>
      <href>Path 3</href>
    </Image>
  </Collections>
  <Collections>
    <Id>2</Id>
    <ItemName>Item2</ItemName>
    <Image>
      <href>Path 4</href>
    </Image>
    <Image>
      <href>Path 5</href>
    </Image>
  </Collections>
</Groups>
2
marc_s 22 फरवरी 2019, 18:08