2013-04-16 205 views
1

我在一个表中有一个XML column与价值观一样读取XML元素

<m lingua="1"> 
    <coloriVini> 
    <i n="8" /> 
    <i n="2" /> 
    <i n="3" /> 
    <i n="4" /> 
    <i n="5" /> 
    <i n="6" /> 
    <i n="7" /> 
    </coloriVini> 
</m> 

,我需要做一个有值从/m/coloriVini/i/@n加入与另一个表 与将显示逗号分隔,但是这我可以处理

一个想法是做一个变量,存储XML,但我问你,如果我可以很容易地做到这一点

我试过

SELECT [L].[nome] 
, p.value('./coloriVini', 'xml') 
FROM [dbo].[contatto] C 
CROSS APPLY [xmlMailing].nodes('m') t(p) 
LEFT JOIN [dbo].[lingua] L ON p.value('./@lingua', 'int') = L.id 

我知道p.value('./coloriVini', 'xml')p.value('./coloriVini', 'nvarchar(200)')不工作,你能告诉我什么,我做错了
感谢

回答

2

尝试这一个 -

DECLARE @XML XML 
SELECT @XML = 
'<m lingua="1"> 
    <coloriVini> 
    <i n="8" /> 
    <i n="2" /> 
    <i n="3" /> 
    <i n="4" /> 
    <i n="5" /> 
    <i n="6" /> 
    <i n="7" /> 
    </coloriVini> 
</m>' 

DECLARE @lingua TABLE 
(
     id INT 
    , nome CHAR(1) 
) 

INSERT INTO @lingua (id, nome) 
VALUES 
    (8, '8'), 
    (2, '2') 

SELECT 
     l.nome 
    , x.coloriVini 
FROM (
    SELECT 
      id = t.p.value('@n', 'int') 
     , coloriVini = t.p.query('../.') 
    FROM @XML.nodes('/m/coloriVini/i') t(p) 
) x 
JOIN @lingua l ON l.id = x.id