我的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值。
我该怎么办?
答案 0 :(得分:0)
一种简单易行的替代方法是将STUFF
与PATINDEX
一起使用,如下所示
SELECT
STUFF(CAST(@xml AS NVARCHAR(MAX)),
PATINDEX('%Yes%', CAST(@xml AS NVARCHAR(MAX))), 3, 'Yes Please');
答案 1 :(得分:0)
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"');