我用谷歌搜索但却无法找到一个很好的例子。 我有一个带有pk ID和十进制列的#temp表
ID decimal
2 0.34
3 0.1
我有另一个名为master的表,其中一列具有相同的pk和xml列,如:
Master
ID xml
2 <Form ....
3 <Form.....
我需要在xml中插入一个新元素,其元素名称为十进制值。所有具有相同元素名称且处于同一级别的。
基本级别的xml如下所示:
<Form formCode="123">
<Node1>234</Node1>
<Node2>234</Node3>
</Form>
我希望最终的xml看起来像:
<Form formCode="123">
<Node1>234</Node1>
<Node2>234</Node3>
<NewNode>0.34</NewNode>
</Form>
我认为应该是这样的:
UPDATE Master
SET
xml.modify('insert /Form/'...followed by some kind of join.
答案 0 :(得分:2)
尝试这样的事情
DECLARE @tbl TABLE(ID INT, decimalColumn DECIMAL(4,2));
INSERT INTO @tbl VALUES
(2,0.34)
,(3,0.1);
DECLARE @master TABLE(ID INT, xmlColumn XML);
INSERT INTO @master VALUES
(2,
'<Form formCode="123">
<Node1>234</Node1>
<Node2>234</Node2>
</Form>')
,(3,
'<Form formCode="456">
<Node1>234</Node1>
<Node2>234</Node2>
</Form>')
UPDATE @master SET xmlColumn.modify('insert sql:column("NewNode.AsXml") as last into /Form[1]')
FROM @master AS m
INNER JOIN @tbl AS tbl ON tbl.ID=m.ID
CROSS APPLY(SELECT CAST(tbl.decimalColumn AS VARCHAR(MAX)) FOR XML PATH('NewNode'),TYPE) AS NewNode(AsXml);
SELECT * FROM @master
结果
2 <Form formCode="123"><Node1>234</Node1><Node2>234</Node2><NewNode>0.34</NewNode></Form>
3 <Form formCode="456"><Node1>234</Node1><Node2>234</Node2><NewNode>0.10</NewNode></Form>
答案 1 :(得分:1)
使用UPDATE ... FROM
和sql:column
功能:
DECLARE @temp TABLE (id int, d decimal(10,2));
DECLARE @master TABLE (id int, x xml);
INSERT @temp
VALUEs (2, 0.34),(3,.1);
INSERT @master
VALUES (2, '<Form><Test /></Form>'), (3, '<Form><Test /></Form>')
UPDATE m
SET x.modify('insert <NewNode>{sql:column("d.d")}</NewNode> after (/Form/Test)[1]')
FROM @master m
INNER JOIN @temp d
ON m.id = d.id
SELECT * FROM @master