1

XML column在一个表中有一个值,比如

<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)')不起作用,你能告诉我我做错了什么吗
谢谢

4

1 回答 1

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
于 2013-04-17T06:20:16.077 回答