Я хотел бы обновить кусок xml, который я храню в переменной. Я хотел бы обновить значение Value
, где Name
- это заданное значение. Вот макет XML:
<ParameterValues>
<ParameterValue>
<Name>TO</Name>
<Value>me@you.com</Value>
</ParameterValue>
<ParameterValue>
<Name>CC</Name>
<Value>bob@email.com</Value>
</ParameterValue>
<ParameterValue>
<Name>Priority</Name>
<Value>NORMAL</Value>
</ParameterValue>
</ParameterValues>
Я написал ниже, который всегда обновляет первое значение, но я хотел бы изменить команду modify
, чтобы у меня был эквивалент к предложению where - я хотел бы обновить (например) значение где Name = "CC"
в том же узле. Как мне этого добиться?
Все примеры, которые я вижу в сети, предполагают, что у меня есть уникальный идентификатор для каждого узла в древовидной структуре выше значения, которое я хочу обновить, а не на том же уровне.
DECLARE @Email VARCHAR(50) = 'New@email.co.uk';
DECLARE @Ext XML =
'<ParameterValues>
<ParameterValue>
<Name>TO</Name>
<Value>me@you.com</Value>
</ParameterValue>
<ParameterValue>
<Name>CC</Name>
<Value>bob@email.com</Value>
</ParameterValue>
<ParameterValue>
<Name>Priority</Name>
<Value>NORMAL</Value>
</ParameterValue>
</ParameterValues>';
SET @Ext.modify('replace value of (//Value/text())[1] with sql:variable("@Email")');
SELECT
Col.value('./Name[1]','VARCHAR(100)') AS [Name]
,Col.value('./Value[1]','VARCHAR(1000)')AS [Value]
FROM
@Ext.nodes('//ParameterValue') AS Tab(Col);
Вся помощь с благодарностью получена!