使用这个结构
<users>
<user>
<fname>Josef</fname>
<lname>Brown</lname>
<email_>jo0@adventure-works.com</email_>
<gender>Male</gender>
</user>
<user>
<fname>Katie</fname>
<lname>McAskill-White</lname>
<email_>katie0@adventure-works.com</email_>
</user>
</users>
xml.modify('replace value of (/users/user/fname/text()) with "Kat"')
我需要添加一个where/条件,只更新fname文本,当电子邮件的文本是相等的,让我们说katie0@adventure-works.com.
我能找到的所有例子都只在条件在路径上时起作用,而不是在同一级别上。
请尝试以下操作
如果需要,您可以使用SQL Server变量作为XQuery的参数。
/p>DECLARE @xml XML =
N'<users>
<user>
<fname>Josef</fname>
<lname>Brown</lname>
<email_>jo0@adventure-works.com</email_>
<gender>Male</gender>
</user>
<user>
<fname>Katie</fname>
<lname>McAskill-White</lname>
<email_>katie0@adventure-works.com</email_>
</user>
</users>';
DECLARE @email VARCHAR(128) = 'katie0@adventure-works.com';
-- SET @xml.modify('replace value of (/users/user[email_="katie0@adventure-works.com"]/fname/text())[1] with "Kat"');
SET @xml.modify('replace value of (/users/user[email_=sql:variable("@email")]/fname/text())[1] with "Kat"');
-- test
SELECT @xml;
<users>
<user>
<fname>Josef</fname>
<lname>Brown</lname>
<email_>jo0@adventure-works.com</email_>
<gender>Male</gender>
</user>
<user>
<fname>Kat</fname>
<lname>McAskill-White</lname>
<email_>katie0@adventure-works.com</email_>
</user>
</users>