I am astonished of FOR XML feature in MSSQL. Oracle, despite claiming they had XML support first, has nothing like that; and XML support in PgSQL and MySQL is just ridiculuos:
The key feature of FOR XML is that is allows fetching multiple tables in just one query.
For example, below SELECT fetches Customer-Order-Shipper-OrderDetail-Product-Supplier-Category relationship:
SELECT *, (
SELECT *, (
SELECT *, (
SELECT *, (
SELECT Suppliers.SupplierID, Suppliers.CompanyName
FROM Suppliers
WHERE Suppliers.SupplierID = Products.SupplierID
FOR XML PATH('Supplier'), TYPE
), (
SELECT Categories.CategoryID, Categories.CategoryName,
Categories.Description
FROM Categories
WHERE Categories.CategoryID = Products.CategoryID
FOR XML PATH('Category'), TYPE
)
FROM Products
WHERE Products.ProductID = OrderDetails.ProductID
FOR XML PATH('Product'), TYPE
)
FROM "Order Details" OrderDetails
WHERE OrderDetails.OrderID = Orders.OrderID
FOR XML PATH('OrderDetail'), TYPE
), (
SELECT Shippers.ShipperID, Shippers.CompanyName
FROM Shippers
WHERE Shippers.ShipperID = Orders.ShipVia
FOR XML PATH('Shipper'), TYPE
)
FROM Orders
WHERE Orders.CustomerID = Customers.CustomerID
FOR XML PATH('Order'), TYPE
)
FROM Customers
FOR XML PATH('Customer'), ROOT('xml'), TYPE
The question is not about receiving tables in XML, but about receiving all tables in just one call, w/ proper master-detail grouping (see attachment for result of the query). It is hard to imagine code doing the same w/ JOINs or cursors or on client-side. This makes FOR XML a perfect use-case in report generation services.
XSLT application servers would benefit greatly from FOR XML support: bespoke multiple tables can be fetched in one call, FOR XML produces results in XML format — just perfect for subsequent XSLT processing.
| Attachment | Size |
|---|---|
| Northwind.xml | 2.79 MB |
Comments
Post new comment