如何从SQL替换XML中的值?

时间:2018-09-26 05:26:59

标签: sql sql-server

我的SQL Server表中有一个xml,如下所示:

<Category>
    <Attributes>
        <Attribute>
            <Name>GeneratorOnBoard1</Name>
            <Value>Yes</Value>
        </Attribute>
        <Attribute>
            <Name>GeneratorOnBoard2</Name>
            <Value>Yes</Value>
        </Attribute>
    </Attributes>
</Category>

我想将GeneratorOnBoard1的值从“是”替换为“是请” 但不应更改GeneratorOnBoard2的值。

如果我使用这个:

declare @xml xml=''

select cast (replace (cast(@xml as nvarchar(max)), 'yes','yes please') as xml)

它可能会替换所有的yes值。

我该怎么办?

2 个答案:

答案 0 :(得分:0)

一种简单易行的替代方法是将STUFFPATINDEX一起使用,如下所示

SELECT 
    STUFF(CAST(@xml AS NVARCHAR(MAX)), 
           PATINDEX('%Yes%', CAST(@xml AS NVARCHAR(MAX))), 3, 'Yes Please');

答案 1 :(得分:0)

使用replace value of (XML DML)

declare @xml xml = '<Category>
    <Attributes>
        <Attribute>
            <Name>GeneratorOnBoard1</Name>
            <Value>Yes</Value>
        </Attribute>
        <Attribute>
            <Name>GeneratorOnBoard2</Name>
            <Value>Yes</Value>
        </Attribute>
    </Attributes>
</Category>';

set @xml.modify('replace value of (/Category
                                    /Attributes
                                     /Attribute[(Name/text())[1] = "GeneratorOnBoard1" and
                                                (Value/text())[1] = "Yes"]
                                      /Value/text())[1] 
                 with "yes please"');