2013-04-26 11 views
6

Mam lista wartości XML zawarte w SQL tabeli pole, które wygląda tak:Zaznacz wszystkie atrybuty XML w 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> 

Chcę móc utworzyć tabelę SQL temp tak:

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

i zapełnij go wszystkimi wartościami/elementami z pliku XML, dzięki czemu mogę użyć tabeli tymczasowej do JOIN z inną instrukcją SELECT.

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

Stwierdzenie dostaje mi się pierwszy, a jeśli przyrost [1] [2] i tak dalej, i może 1 przez 1 wybrać każdy atrybut. Ale muszę wierzyć, że istnieje sposób, aby je wszystkie zdobyć. Próbowałem różnych odmian i po prostu nie zastanawiałem się nad tym. Myślę, że muszę gdzieś użyć symbolu wieloznacznego *.

Odpowiedz

3

należy użyć metody nodes:

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

Zobacz here o CROSS APPLY

+0

nie mam pojęcia jak to działa, ale to robi - perfecly. I intellisense w SQL Managment Studio też nie. To jest zdezorientowane o item.value i data.nodes. Muszę zbadać metodę węzłów. Dziękuję bardzo! – nitewulf50

Powiązane problemy