gpt4 book ai didi

sql - 使用父节点上的 where 条件获取 XML 子节点的属性值

转载 作者:数据小太阳 更新时间:2023-10-29 03:00:56 24 4
gpt4 key购买 nike

我在 sql server 数据库中有一个 Process 表,如下所示:

Proccess Table

workflowXML 列具有如下值:

<Tasks>  
<Task type="start" id="Task_038517r">
<TaskUsers>
<TaskUser RoleName="User"/>
</TaskUsers>
</Task>
<Task type="final" id="Task_1sytah6">
<TaskUsers>
<TaskUser RoleName="Admin"/>
</TaskUsers>
</Task>
</Tasks>

我需要在 Task 节点中查询 RoleName Tasktype开始。我测试这个查询:

select m.c.value('@RoleName','varchar(max)') as RoleName
from Process as p
outer apply
p.WorkflowXML.nodes('/Tasks/Task/TaskUsers/TaskUser') as m(c)
where
WorkflowXML.exist('/Tasks/Task[@type="start"]') = 1

但是 WorkflowXML.exist 不正确并返回 xml 列中的所有 RoleNames

如果有人能解释这个问题的解决方案,那将非常有帮助。

谢谢。

最佳答案

最好将过滤器直接包含到 XPath 中:

select m.c.value('@RoleName','varchar(max)') as RoleName
from Process as p
outer apply p.WorkflowXML.nodes('/Tasks/Task[@type="start"]/TaskUsers/TaskUser') as m(c)

您使用 WHERE 的方法对于更大的数量/结构可能会变得相当慢......

关于sql - 使用父节点上的 where 条件获取 XML 子节点的属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38453156/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com