2
我在SQL Server中的Process
表是这样的:获取XML子节点的值与动态父在SQL Server
workflowXML
列有值是这样的:
<bpmn:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn">
<bpmn:process id="Process_1" isExecutable="false">
<bpmn:startEvent id="StartEvent_1rin5au">
<bpmn:outgoing>SequenceFlow_1q36672</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:userTask id="UserTask_038517r" name="addRequest">
<bpmn:incoming>SequenceFlow_1q36672</bpmn:incoming>
<bpmn:outgoing>SequenceFlow_0dpq0oe</bpmn:outgoing>
</bpmn:userTask>
<bpmn:serviceTask id="ServiceTask_17e1u09" name="checkRequest">
<bpmn:incoming>SequenceFlow_1q36672</bpmn:incoming>
<bpmn:outgoing>SequenceFlow_1233bp0</bpmn:outgoing>
</bpmn:serviceTask>
</bpmn:process>
</bpmn:definitions>
我需要一个SQL查询得到的id
节点的incoming
的值与outgoing
的值相等,即bpmn:startEvent
节点。
我测试这个子查询:
;WITH XMLNAMESPACES('http://www.omg.org/spec/BPMN/20100524/MODEL' AS bpmn)
select
p.workflowXML.value('(bpmn:definitions/bpmn:process/bpmn:userTask/bpmn:incoming)[1]', 'nvarchar(max)')
from
Process as p
但这个代码只返回结果为bpmn:userTask
。我用其他的子查询:
;WITH XMLNAMESPACES('http://www.omg.org/spec/BPMN/20100524/MODEL' AS bpmn)
select
p.workflowXML.value('(bpmn:definitions/bpmn:process/../bpmn:incoming)[1]', 'nvarchar(max)')
from
Process as p
但它返回null
。
我的查询是这样的:
declare @SequenceFlow nvarchar(max)
;WITH XMLNAMESPACES('http://www.omg.org/spec/BPMN/20100524/MODEL' AS bpmn)
select @SequenceFlow =
(
SELECT p.workflowXML.value('(/bpmn:definitions/bpmn:process/bpmn:startEvent/bpmn:outgoing)[1]','nvarchar(max)')
from Process as p
where ID = 1
)
;WITH XMLNAMESPACES('http://www.omg.org/spec/BPMN/20100524/MODEL' AS bpmn)
select p.workflowXML.value('(bpmn:definitions/bpmn:process/../bpmn:incoming)[1]','nvarchar(max)')
from Process as p
where p.workflowXML.value('(bpmn:definitions/bpmn:process/../bpmn:incoming)[1]','nvarchar(max)') = @SequenceFlow
这将是非常有益的,如果有人可以解释这个问题的解决方案。
谢谢。
鉴于上述样本数据,预期输出是多少? – har07
@ har07对于样本数据,结果是id =“ServiceTask_17e1u09”和id =“UserTask_038517r” –