TSQL XML字段-如何使用同一级别的另一个标记的条件更新标记



使用这个结构

<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>

相关内容

  • 没有找到相关文章

最新更新