Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何更新xml列中的某些节点?_Sql Server_Tsql - Fatal编程技术网

Sql server 如何更新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"> &

我在表格的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</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")');