Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak zwrócić XML z SQL Server 2008, który jest ustrukturyzowany z wieloma wyborami mającymi wspólnego rodzica?

Spróbuj czegoś takiego - używa FOR XML PATH i wybiera podrzędne, aby utworzyć "połączone" pod-węzły dla danego klienta (Ograniczyłem to do dwóch podtablic - ale powinieneś poznać ich "istotę" i być w stanie rozszerzyć go na dowolną liczbę połączonych podtabel ):

SELECT
    CustomerID AS '@CustomerID',
    CustName AS '@Name',

    (SELECT ProductName AS '@productname'
     FROM dbo.Products p
     WHERE p.CustomerID = c.CustomerID  
     FOR XML PATH('Product'), TYPE) AS 'Products',

    (SELECT HobbyName AS '@hobbyname'
     FROM dbo.Hobbies h 
     WHERE h.CUstomerID = c.CustomerID
     FOR XML PATH('Hobby'), TYPE) AS 'Hobbies'
FROM
    dbo.Customers c
FOR XML PATH('Customer'), ROOT('Customers')

Daje mi wynik podobny do:

<Customers>
  <Customer CustomerID="1" Name="Fred">
    <Products>
      <Product productname="Table" />
      <Product productname="Wardrobe" />
      <Product productname="Chair" />
    </Products>
    <Hobbies>
      <Hobby hobbyname="Golf" />
      <Hobby hobbyname="Swimming" />
    </Hobbies>
  </Customer>
  <Customer CustomerID="2" Name="Sue">
    <Products>
      <Product productname="CD Player" />
      <Product productname="Picture frame" />
    </Products>
    <Hobbies>
      <Hobby hobbyname="Dancing" />
      <Hobby hobbyname="Gardening" />
      <Hobby hobbyname="Reading" />
    </Hobbies>
  </Customer>
</Customers>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TSQL porównujący dwa zestawy

  2. Utwórz jeden wyzwalacz dla wielu operacji

  3. Jak korzystać z funkcji Stopwords i Stoplist, aby ulepszyć wyszukiwanie pełnotekstowe w programie SQL Server (FTS)

  4. Czy tabela serwera sql może mieć dwie kolumny tożsamości?

  5. Dynamicznie twórz kolumny sql