sql-server - 更新多个节点的 XML 数据
问题描述
我想根据所选计划更新 Isselected 计划数据
SET @DataXml.modify(' replace value of (/*/Plans/Plan[sql:variable("@PlanID")]/Details/IsSelected/text())[1] with sql:variable("IsSelectedValue")')
但上面的查询总是更新第一个。
<Plans>
<Plan>
<Details>
<IsSelected>true</IsSelected>
</Details>
</plan>
<Plan>
<Details>
<IsSelected>false</IsSelected>
</Details>
</plan>
<Plan>
<Details>
<IsSelected>false</IsSelected>
</Details>
</plan>
</Plans>
if((SELECT count(Col.value('(Details)[1]', 'nvarchar(max)')) AS Selected FROM @DataXml.nodes('Options/Option') AS Tbl(Col)) > 1)
BEGIN
SET @DataXml.modify(' replace value of (/*/Options/Option[sql:variable("@OptionID")]/Details/IsSelectedValue/text())[1] with sql:variable("@IsSelectedValue")')
END
ELSE
BEGIN
SET @DataXml.modify(' replace value of (/*/Options/Option/Details/IsSelectedValue/text())[1] with sql:variable("@IsSelectedValue")')
END
如果我可以像上面的数据一样获得节点计数,它应该返回计数 3,我可以设法解决这个问题。
解决方案
这个答案可能为时已晚......但它可能仍然有帮助......
我必须承认,我没有完全理解你的问题。试试这个:
样机-XML
DECLARE @xml XML=
N'<Plans>
<Plan>
<Details>
<IsSelected>true</IsSelected>
</Details>
</Plan>
<Plan>
<Details>
<IsSelected>false</IsSelected>
</Details>
</Plan>
<Plan>
<Details>
<IsSelected>false</IsSelected>
</Details>
</Plan>
</Plans>';
--此查询将回答您的问题
如果我可以像上面的数据一样获得节点计数它应该返回计数 3 我可以设法解决这个问题
SELECT @xml.value('count(/Plans/Plan)','int') AS CountOfPlans;
--并且此查询会将第二个更改<IsSelected>
为新值
DECLARE @position INT=2;
DECLARE @newValue VARCHAR(100)='blah';
SET @xml.modify('replace value of (/Plans/Plan[sql:variable("@position")]/Details/IsSelected/text())[1] with sql:variable("@newValue")');
SELECT @xml;
第一个返回“3”,第二个返回这个 XML
<Plans>
<Plan>
<Details>
<IsSelected>true</IsSelected>
</Details>
</Plan>
<Plan>
<Details>
<IsSelected>blah</IsSelected>
</Details>
</Plan>
<Plan>
<Details>
<IsSelected>false</IsSelected>
</Details>
</Plan>
</Plans>
推荐阅读
- python-3.x - raise Exception("Something is wrong") 和 sys.exit("Something is wrong") 之间的区别
- python-3.x - 在 keras 中获取权重
- text - 如何在 LaTeX 的表格下插入箭头?
- json - Python - 从字典对象将 json 写入 BytesIO 并存储为压缩的 tar.gz
- amazon-web-services - AWS Multicontainer Beanstalk 中是否可以有多个任务定义?
- c++ - 使用联合时未定义行为的情况
- python - 如何在 Python 和 plotly 中显示比我实际需要的更大的颜色条/色阶?
- python - 在 pandas 中解析一列字符串化字典
- java - 从 java 中的 csv 列添加:如何重置变量总数?
- javascript - Firebase 函数 - 使用具有不同参数的函数两次