SQL Server - 如何将一个多元素XML分解为插入表中的单元素XML值?

时间:2012-07-20 11:58:13

标签: sql-server sql-server-2008-r2

我正在与@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?

松散相关

1 个答案:

答案 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)

这给了我一个输出:

enter image description here

这就是你要找的东西吗?

更新:好的,如果我理解正确,这个就是您想要的:

SELECT
    c.query('.')
FROM @x.nodes('/row') AS T(c)

输出:

enter image description here