Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách trả về XML từ SQL Server 2008 được cấu trúc với nhiều lựa chọn chia sẻ một nguồn gốc chung

Hãy thử một cái gì đó như thế này - nó sử dụng FOR XML PATH và các lựa chọn con để tạo các nút phụ "được liên kết" cho một khách hàng nhất định ( Tôi đã giới hạn điều này ở hai bảng phụ - nhưng bạn sẽ có được "ý chính" của nó và có thể mở rộng nó thành bất kỳ số lượng bảng con được liên kết nào ):

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

Cung cấp cho tôi một đầu ra như:

<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. Cuộc gọi ODBC không thành công với thủ tục được lưu trữ - Chuyển qua truy vấn

  2. Cách tính tuổi (theo năm) dựa trên Ngày sinh và getDate ()

  3. Cài đặt từng bước SQL Server 2017 -2

  4. Cách thêm Ràng buộc Mặc định vào các Cột hiện có trong Bảng SQL Server - Hướng dẫn SQL Server / TSQL Phần 91

  5. Trả lại tất cả các cột không được tính toán từ một bảng trong SQL Server