我的SQL表列具有xml数据,如下所示
我正在尝试根据特定的标签值(age)查找元素。但是,我的xml值中有前导空格。因此,其条件失败。请引导我处理此问题。
例:
declare @age2 varchar(40)='23'
declare @ageNew2 varchar(40)='43'
declare @xmldata xml='<Root>
<Identification Name="John" Family="Brown"><Age>40</Age><name>xxx</name></Identification>
<Identification Name="Smith" Family="Johnson"><Age>35</Age><name>xxx</name></Identification>
<Identification Name="Jessy" Family="Albert"><Age>60</Age><name>xxx</name></Identification>
<Identification Name="Mike" Family="Brown"><Age>23</Age><name>xxx</name></Identification>
<Identification Name="Sarah" Family="Johnson"><Age>40</Age><name>xxx</name></Identification>
<Identification Name="Jessy" Family="Albert"><Age>40</Age><name>xxx</name></Identification>
<Identification Name="Mike" Family="Brown"><Age>23 </Age><name>xxx</name></Identification>
<Identification Name="Sarah" Family="Johnson"><Age>45</Age><name>xxx</name></Identification>
</Root>'
declare @dynamicData varchar(max)
set @dynamicData=' declare @xml varchar(max) ='''+Convert(varchar(max),@xmldata)+''' '
set @dynamicData +=' declare @xmld xml=convert(xml,@xml) '
set @dynamicData +=' declare @age varchar(55) ='''+@age2+''''
set @dynamicData +=' declare @ageNew varchar(55) ='''+@ageNew2+''''
DECLARE @nodeCount int
DECLARE @i int
SET @i = 0
SELECT @nodeCount = @xmldata.value('count(/Root/Identification/Age)','int')
WHILE (@i < @nodeCount)
BEGIN
set @dynamicData+=' set @xmld.modify(''replace value of (/Root/Identification[Age=sql:variable("@age")]/name/text())['+convert(varchar(10),@i)+'] with "'+@ageNew2+'"'') '
SET @i = @i + 1
END
set @dynamicData+=' select convert(xml,@xmld) '
exec(@dynamicData) 在这里,我正在尝试将23岁更新为43岁。因此,按照我的期望。它应该替换两个地方。但是,它取代了第一个。因为,第二个有空间。所以,请引导我。谢谢
您可以尝试将Age / text()强制转换为令牌,以删除所有空格(如果这是您真正需要的)
替换值```js (/ Root / Identification [ xs:token(Age [1]) = sql:variable(“ @ age”)] / name / text())
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。