Sql server 如何更新xml列中的某些节点?
我在表格的xml列中有以下内容。如何编写一个只替换全部值的一部分的查询?文本替换将被另一个值替换Sql server 如何更新xml列中的某些节点?,sql-server,tsql,Sql Server,Tsql,我在表格的xml列中有以下内容。如何编写一个只替换全部值的一部分的查询?文本替换将被另一个值替换 <Root> <Response xmlns:ns1="urn:names:tc:legalxml-message1:schema:xsd:Message-4.0"> <Message xmlns:ns2="urn:names:tc:legalxml-message2:schema:xsd:Types-4.0"> &
<Root>
<Response xmlns:ns1="urn:names:tc:legalxml-message1:schema:xsd:Message-4.0">
<Message xmlns:ns2="urn:names:tc:legalxml-message2:schema:xsd:Types-4.0">
<Response1>
<ns1:Name>REPLACE name1</Name>
</Response1>
<Response2>
<ns1:Name>REPLACE name2</Name>
</Response2>
<Response3>
<ns1:Name>REPLACE name3</Name>
</Response3>
<Response4>
<ns1:Name>REPLACE name4</Name>
</Response4>
</Message>
</Response>
</Root>
鉴于以下样本数据:
DECLARE @xml XML =
'<Root>
<Response xmlns:ns1="urn:names:tc:legalxml-message1:schema:xsd:Message-4.0">
<Message xmlns:ns2="urn:names:tc:legalxml-message2:schema:xsd:Types-4.0">
<Response1>
<ns1:Name>REPLACE name1</ns1:Name>
</Response1>
<Response2>
<ns1:Name>REPLACE name2</ns1:Name>
</Response2>
<Response3>
<ns1:Name>REPLACE name3</ns1:Name>
</Response3>
<Response4>
<ns1:Name>REPLACE name4</ns1:Name>
</Response4>
</Message>
</Response>
</Root>';
DECLARE @replaceText VARCHAR(100) = 'Something New Here';
在这个^^示例中,我正在更新Response4节点。您还可以使用节点位置来更新XML。以下示例将更新响应1:
SET @xml.modify('replace value of (/Root/Response/Message//*:Name/text())[1]
with sql:variable("@replaceText")');
要更新响应2,请将[1]
更改为[2]
,如下所示:
SET @xml.modify('replace value of (/Root/Response/Message//*:Name/text())[2]
with sql:variable("@replaceText")');
你过了多远?请显示您的代码。请查看我的更新帖子以了解我的尝试。谢谢,谢谢。我通过你的询问进一步了解到了这一点。另外,如果我有多个节点,我可以使用节点位置,如您的示例所示。
SET @xml.modify('replace value of (/Root/Response/Message//*:Name/text())[1]
with sql:variable("@replaceText")');
SET @xml.modify('replace value of (/Root/Response/Message//*:Name/text())[2]
with sql:variable("@replaceText")');