我正在与@x.nodes('...')
战斗,因为我是XQuery的新手。我确实用以下方式构造了XML变量@x
:
CREATE TABLE tab (a int, b int, c int);
GO
INSERT INTO tab (a, b, c) VALUES (1, 11, 111);
INSERT INTO tab (a, b, c) VALUES (2, 22, 222);
INSERT INTO tab (a, b, c) VALUES (3, 33, 333);
INSERT INTO tab (a, b, c) VALUES (4, 44, 444);
GO
DECLARE @x XML = (SELECT * FROM tab FOR XML RAW, TYPE);
显示其内容时,它看起来像:
<row a="1" b="11" c="111" />
<row a="2" b="22" c="222" />
<row a="3" b="33" c="333" />
<row a="4" b="44" c="444" />
即。单个多行字符串。 如何将单个多元素XML值分解为目标表中的许多单元素值? (我知道官方nodes() Method (xml Data Type)文档页面,但我做错了。)
CREATE TABLE tab2 (e XML);
??? ... @x.nodes('//row') ... ???
谢谢,彼得
P.S。这个问题与Service Broker -- how to extract the rows from the XML message?
松散相关答案 0 :(得分:1)
好的 - 所以你有一个包含你发布的XML的XML变量 - 你需要把它变成它自己的各个位吗?
尝试这样的事情:
SELECT
value_a = c.value('(@a)[1]', 'int'),
value_b = c.value('(@b)[1]', 'int'),
value_c = c.value('(@c)[1]', 'int')
FROM @x.nodes('/row') AS T(c)
这给了我一个输出:
这就是你要找的东西吗?
更新:好的,如果我理解正确,这个就是您想要的:
SELECT
c.query('.')
FROM @x.nodes('/row') AS T(c)
输出: