[英]get attribute value of XML child node with where condition on parent node
我在sql server數據庫中有一個Process
表,如下所示:
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>
我需要SQL進行查詢得到RoleName
在Task
節點那個type
的Task
是start
。 我測試此查詢:
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
方法可能會變得很慢...
您可以將WHERE
語句更改為此:
WHERE m.c.value('../../@type','varchar(max)') = 'start'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.