Я хочу заменить значение в теге элемента, в зависимости от его значения, а также значение другого элемента (на том же уровне, что и указанный элемент), причем оба элемента находятся внутри одного и того же тег родительского элемента везде (каждый родительский тег уникален из-за своего собственного атрибута ID). Я хочу сделать изменения в разных местах этой XML-переменной в хранимой процедуре.изменить (заменить) XML для условий
Будучи первым таймером при этом, я застрял в том, как я мог изменять элементы по всему XML. Оба элемента присутствуют в одном и том же родительском элементе по всему документу, и каждый из этих родительских тегов имеет уникальный атрибут идентификатора.
Любые предложения окажут большую помощь. Ссылки на документы о том, как смешивать и сопоставлять «значение()», «изменить()» и т. Д., Также помогут.
DECLARE @xml xml = '
<SemanticModel xmlns="schemas.microsoft.com/sqlserver/2004/10/semanticmodeling"; xmlns:xsi="w3.org/2001/XMLSchema-instance"; xmlns:xsd="w3.org/2001/XMLSchema"; ID="G1">
<Entities>
<Entity ID="E1">
<Fields>
<Attribute ID="A1">
<Name>AAAA</Name>
<DataType>Float</DataType>
<Format>n0</Format>
<Column Name="AAAA_ID" />
</Attribute>
<Attribute ID="A2">
<Name>BBBB</Name>
<DataType>Integer</DataType>
<Format>n0</Format>
<Column Name="BBBB_ID" />
</Attribute>
<Attribute ID="A3">
<Name>KKKK</Name>
<Variations>
<Attribute ID="A4">
<Name>CCCC</Name>
<DataType>Float</DataType>
<Format>n0</Format>
</Attribute>
<Attribute ID="A5">
<Name>AAAA</Name>
<DataType>Float</DataType>
<Format>n0</Format>
</Attribute>
</Variations>
<Name>AAAA</Name>
<DataType>Float</DataType>
<Format>n0</Format>
</Attribute>
</Fields>
</Entity>
</Entities>'
DECLARE @i int = 0
;WITH XMLNAMESPACES ('http://schemas.microsoft.com/sqlserver/2004/10/semanticmodeling' as dm, 'http://schemas.microsoft.com/analysisservices/2003/engine' as dsv, 'http://w3.org/2001/XMLSchema' as xs)
select @i = @xml.value('count(//dm:Attribute[dm:DataType="Float" and dm:Format="n0"]/dm:Format)', 'int')
select @i
while @i > 0
begin
set @xml.modify('
replace value of
(//dm:Attribute[dm:DataType="Float" and dm:Format="n0"]/dm:Format/text())[1]
with "f2"
')
set @i = @i - 1
end
select @xml
Я хочу, чтобы заменить значение Формат «n0» до «F2» для всех атрибутов, формат значение «n0» и DataType является «Поплавок».
-Thankyou
Можете ли вы добавить пример ввода xml и желаемого вывода xml? –