2013-04-26 33 views
6

Tôi có một danh sách giá trị XML chứa trong một SQL Bảng Dòng giống như vậy:Chọn thuộc tính tất cả XML trong SQL

<valuelist xmlns="" name="VL_IncCompCondVL"> 
    <li value="BL" item="BLOCKED" /> 
    <li value="NK" item="NO KEY" /> 
    <li value="FL" item="FLOODED" /> 
    <li value="TD" item="TORN DOWN" /> 
    <li value="UL" item="UNABLE TO LOCATE" /> 
</valuelist> 

Tôi muốn để có thể tạo ra một bảng SQL tạm thời như sau:

CREATE TABLE #incompleteCode 
(
value nvarchar(2), 
item nvarchar(20) 
) 

và điền nó với tất cả các giá trị/mục từ XML để tôi có thể sử dụng bảng tạm thời để THAM GIA với một câu lệnh SELECT khác.

SELECT Data.value('(/valuelist/li/@item)[1]', 'nvarchar(50)') AS Item 
                FROM ValueList 
                WHERE Name = 'VL_IncCompCondVL' 

Tuyên bố đó cho tôi câu đầu tiên và nếu tôi tăng [1] thành [2] và cứ như vậy, tôi có thể chọn 1 từng thuộc tính. Nhưng tôi phải tin rằng có một cách để có được tất cả. Tôi đã thử một số biến thể và tôi không tìm ra nó. Tôi nghĩ tôi cần sử dụng ký tự đại diện * ở đâu đó.

Trả lời

3

Bạn nên sử dụng phương pháp nodes:

SELECT 
    item.value('.', 'nvarchar(50)') 
FROM 
    ValueList 
    CROSS APPLY data.nodes('/valuelist/li/@item') as T2(item) 
where 
    name='VL_IncCompCondVL' 

Xem here về CROSS APPLY

+0

Tôi không có ý tưởng làm thế nào mà làm việc nhưng nó - perfecly. Và intellisense trong SQL Managment Studio cũng vậy. Nó bị nhầm lẫn về item.value và data.nodes. Tôi phải đi nghiên cứu phương pháp nút. Cảm ơn bạn rất nhiều! – nitewulf50

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