如何修改包含特定子节点值的XML节点?
我有一个带有XML列的表。如何在包含具有特定值的子节点的节点内添加另一个节点?例如,我想将如何修改包含特定子节点值的XML节点?,xml,tsql,sql-server-2014,Xml,Tsql,Sql Server 2014,我有一个带有XML列的表。如何在包含具有特定值的子节点的节点内添加另一个节点?例如,我想将foo/bar/e/f节点从barId 6699复制到barId 66989。我只找到基于属性值选择节点的示例。我需要改为按子节点值进行筛选 <foo> <bar> <barId>66988</barId> <name>baz 3</name> </bar> <b
foo/bar/e/f
节点从barId 6699复制到barId 66989。我只找到基于属性值选择节点的示例。我需要改为按子节点值进行筛选
<foo>
<bar>
<barId>66988</barId>
<name>baz 3</name>
</bar>
<bar>
<barId>66989</barId>
<name>b </name>
<e>
<g>
<h>
<l>-</l>
<m>k</m>
</h>
<h>
<l>p v</l>
<m>k</m>
</h>
</g>
</e>
</bar>
<bar>
<barId>6699</barId>
<name>n 4 c</name>
<e>
<f>
<h>
<i>k</i>
<j>9.3</j>
</h>
</f>
</e>
</bar>
</foo>
66988
巴兹3
66989
B
-
K
PV
K
6699
n4c
K
9.3
试试这个:
DECLARE @value XML = '<foo><bar><barId>66988</barId><name>baz 3</name></bar><bar><barId>66989</barId><name>b </name><e><g><h><l>-</l><m>k</m></h><h><l>p v</l><m>k</m></h></g></e></bar><bar><barId>6699</barId><name>n 4 c</name><e><f><h><i>k</i><j>9.3</j></h></f></e></bar></foo>';
DECLARE @SourceID INT = 6699;
DECLARE @DestinationID INT = 66989;
DECLARE @temp XML;
SELECT @temp = T.c.query('.')
FROM @value.nodes('/foo/bar[barId = sql:variable("@SourceID")]/e/f') T(c);
SELECT @temp;
SET @value.modify('insert sql:variable("@temp") as last into (/foo/bar[barId =sql:variable("@DestinationID")]/e)[1]')
SELECT @value;
DECLARE@value XML='66988baz 366989b-kp vk6699n 4 ck9.3';
声明@SourceID INT=6699;
声明@DestinationID INT=66989;
声明@tempXML;
选择@temp=T.c.query(“.”)
来自@value.nodes('/foo/bar[barId=sql:variable(“@SourceID”))]/e/f')T(c);
选择@temp;
将@value.modify('insert sql:variable(@temp')设置为(/foo/bar[barId=sql:variable(@DestinationID”)]/e)[1]'中的最后一个
选择@value;
它将为您提供以下信息:
<foo>
<bar>
<barId>66988</barId>
<name>baz 3</name>
</bar>
<bar>
<barId>66989</barId>
<name>b </name>
<e>
<g>
<h>
<l>-</l>
<m>k</m>
</h>
<h>
<l>p v</l>
<m>k</m>
</h>
</g>
<f>
<h>
<i>k</i>
<j>9.3</j>
</h>
</f>
</e>
</bar>
<bar>
<barId>6699</barId>
<name>n 4 c</name>
<e>
<f>
<h>
<i>k</i>
<j>9.3</j>
</h>
</f>
</e>
</bar>
</foo>
66988
巴兹3
66989
B
-
K
PV
K
K
9.3
6699
n4c
K
9.3
以下是访问具有特定子节点值的节点的示例: