Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara mengembalikan XML dari SQL Server 2008 yang terstruktur dengan beberapa pilihan yang berbagi induk yang sama

Coba sesuatu seperti ini - ini menggunakan FOR XML PATH dan memilih untuk membuat sub-simpul "tertaut" untuk pelanggan tertentu (Saya membatasi ini pada dua sub tabel - tetapi Anda harus mendapatkan "intinya" dan dapat memperluasnya ke sejumlah subtabel yang ditautkan ):

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')

Memberi saya output seperti:

<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. Bisakah SQL Server Pivot tanpa mengetahui nama kolom yang dihasilkan?

  2. Bagaimana cara memilih semua catatan dari satu tabel yang tidak ada di tabel lain?

  3. Partisi SQL Server per tabel pada ID Penyewa - ruang disk yang digunakan

  4. TSQL - Bagaimana cara menggunakan GO di dalam blok BEGIN .. END?

  5. Kembalikan Informasi Kolom dari Server Tertaut di SQL Server (Contoh T-SQL)