2012-03-29 43 views
17

Tôi đang cố gắng xuất một số dữ liệu từ cơ sở dữ liệu theo định dạng XML cụ thể do khách hàng chỉ định. XML tôi tạo ra sẽ được thao tác (có lẽ bởi XSLT) bởi bên thứ ba để tạo ra kết quả cuối cùng, nhưng tôi muốn chính thức XML của tôi càng gần với định dạng đó.SQL FOR XML - Xuất dữ liệu dưới dạng Phần tử hoặc dưới dạng Thuộc tính

Khách hàng đã yêu cầu dữ liệu trên mỗi sản phẩm như vậy:

<product id="1234567890123"> 
    <activeState partNumber="A1234567890" shipmentDate="20110518" /> 
</product> 

SQL hiện có của tôi là:

SELECT SerialNo as id, 
    PartNo as partNumber, 
    CONVERT(VARCHAR(8), GETDATE(), 112) AS shipmentDate, 
FROM Products 
WHERE SerialNo = @SerialNo 
FOR XML PATH ('product'), TYPE) 

... mà làm cho:

<product> 
    <id>100000000458</id> 
    <partNumber>10004905892</partNumber> 
    <shipmentDate>20120312</shipmentDate> 
</product> 

Tôi hy vọng rằng thật dễ dàng để thao tác dữ liệu này trong XSLT, nhưng hoàn toàn là một bài tập trí tuệ, tôi muốn xem tôi có thể SQL. Tham vọng đầu tiên của tôi là chỉ đơn giản là thể hiện id là một thuộc tính của sản phẩm chứ không phải là một phần tử con. Kết xuất phần tử activeState tôi sắp rời khỏi XSLT, nhưng rõ ràng, nếu tôi có thể giúp họ trên con đường của họ, tại sao không làm như vậy ...

Bất kỳ đề xuất nào?

Trả lời

27

Sử dụng @ để tạo thuộc tính.

select SerialNo as "@id", 
     PartNo as "activeState/@partNumber", 
     convert(varchar(8), getdate(), 112) as "activeState/@shipmentDate" 
from Products 
where SerialNo = @SerialNo 
for xml path('product') 
+0

Làm việc điều trị - cảm ơn. – CJM

Các vấn đề liên quan