xml - 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。
我能找到的所有示例仅在条件在路径上时才有效,但不在同一级别。
解决方案
Please try the following.
If needed, you can use SQL Server variables as parameters for the XQuery.
SQL
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;
Output
<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>
推荐阅读
- asp.net-core - 在一个 IIS 网站下托管 Asp.Net Core 和 Asp.Net MVC 5 Web API
- php - 在 Symfony 4 中使用 Ajax 上传裁剪图像时,在 null 上调用成员函数 getData()
- sql - 在 Oracle 中转置表
- apache - 是否可以在 apache 网络服务器上安装 D 编译器?
- python - 请求挂在python中的线程
- php - 如何解决我的登录问题?
- google-maps - Google 即用即付价格
- javascript - 将数据发布到 Angular 4 应用程序
- c# - 无法获取已删除 Exchange 用户的 SMTP 地址
- c#-4.0 - ActiveX 对象的“Created”属性始终为 false