Pesquisa de várias metas em nós XML no SQL Server
Eu tenho uma tabela de processo no SQL Server como esta:
workflowXML
A coluna possui valores como este:
sample1 (ProcessID = 1)
workflowXML da amostra1:
<process>
<Event type="start" id="StartEvent_1" name="Start">
<outgoing>SequenceFlow_0z7u86p</outgoing>
<outgoing>SequenceFlow_1onkt3z</outgoing>
</Event>
<task type="" id="Task_0a7vu1x" name="D">
<incoming>SequenceFlow_108ajnm</incoming>
<incoming>SequenceFlow_1onkt3z</incoming>
<outgoing>SequenceFlow_01clcmz</outgoing>
</task>
<task type="goal" id="Task_00ijt4n" name="B">
<incoming>SequenceFlow_17q1ecq</incoming>
<incoming>SequenceFlow_0q9j3et</incoming>
<outgoing>SequenceFlow_1ygvv8b</outgoing>
<outgoing>SequenceFlow_02glv1g</outgoing>
</task>
<task type="" id="Task_1rnuz4y" name="A">
<incoming>SequenceFlow_1ygvv8b</incoming>
<incoming>SequenceFlow_0z7u86p</incoming>
<outgoing>SequenceFlow_108ajnm</outgoing>
<outgoing>SequenceFlow_17q1ecq</outgoing>
<outgoing>SequenceFlow_075iuj9</outgoing>
</task>
<task type="goal" id="Task_1d4ykor" name="E">
<incoming>SequenceFlow_01clcmz</incoming>
<incoming>SequenceFlow_075iuj9</incoming>
<incoming>SequenceFlow_1djp3tu</incoming>
<outgoing>SequenceFlow_0q9j3et</outgoing>
</task>
<task type="goal" id="Task_1sembw4" name="C">
<incoming>SequenceFlow_02glv1g</incoming>
<outgoing>SequenceFlow_1djp3tu</outgoing>
</task>
</process>
sample2 (ProcessID = 2)
workflowXML de sample2:
<process id="Process_1" isExecutable="false">
<Event type="start" id="StartEvent_0bivq0x" name="Start">
<outgoing>SequenceFlow_0q5ik20</outgoing>
<outgoing>SequenceFlow_147xk2x</outgoing>
</Event>
<task type="" id="Task_141buye" name="A">
<incoming>SequenceFlow_0q5ik20</incoming>
<incoming>SequenceFlow_0wg37hn</incoming>
<outgoing>SequenceFlow_1pvpyhe</outgoing>
<outgoing>SequenceFlow_10is4pe</outgoing>
</task>
<task type="" id="Task_1n3p00i" name="C">
<incoming>SequenceFlow_147xk2x</incoming>
<incoming>SequenceFlow_10is4pe</incoming>
<outgoing>SequenceFlow_18ks1jr</outgoing>
<outgoing>SequenceFlow_08gxini</outgoing>
</task>
<task type="goal" id="Task_0olxqpp" name="B">
<incoming>SequenceFlow_1pvpyhe</incoming>
<outgoing>SequenceFlow_03eekq0</outgoing>
</task>
<task type="goal" id="Task_0zjgfkf" name="D">
<incoming>SequenceFlow_18ks1jr</incoming>
<incoming>SequenceFlow_03eekq0</incoming>
<outgoing>SequenceFlow_0wg37hn</outgoing>
</task>
<task type="" id="Task_1q71efy" name="E">
<incoming>SequenceFlow_08gxini</incoming>
</task>
</process>
Editar1 (Adicionar amostra3)
sample3 (ProcessID = 3)
workflowXML de sample3:
<process>
<Event type="start" id="StartEvent_1" name="Start">
<outgoing>SequenceFlow_01rkkhj</outgoing>
</Event>
<task type="" id="Task_1jixk79" name="A">
<incoming>SequenceFlow_01rkkhj</incoming>
<incoming>SequenceFlow_1tszkq8</incoming>
<outgoing>SequenceFlow_0v8wuqu</outgoing>
<outgoing>SequenceFlow_14u6fh7</outgoing>
<outgoing>SequenceFlow_1q4991g</outgoing>
</task>
<task type="" id="Task_0xwvhuo" name="B">
<incoming>SequenceFlow_0v8wuqu</incoming>
<outgoing>SequenceFlow_15fmkbq</outgoing>
<outgoing>SequenceFlow_0x4ykgp</outgoing>
<outgoing>SequenceFlow_0f4gpf1</outgoing>
</task>
<task type="goal" id="Task_0qsvlob" name="G">
<incoming>SequenceFlow_0qse1xk</incoming>
<incoming>SequenceFlow_16a0qvv</incoming>
</task>
<task type="goal" id="Task_0wtjftd" name="E">
<incoming>SequenceFlow_14u6fh7</incoming>
<incoming>SequenceFlow_0z3qle8</incoming>
<outgoing>SequenceFlow_0vg7sax</outgoing>
<outgoing>SequenceFlow_0qse1xk</outgoing>
</task>
<task type="" id="Task_0c85e6p" name="F">
<incoming>SequenceFlow_0x4ykgp</incoming>
<incoming>SequenceFlow_17k5zfg</incoming>
<outgoing>SequenceFlow_16a0qvv</outgoing>
<outgoing>SequenceFlow_0z3qle8</outgoing>
</task>
<task type="" id="Task_164ihwt" name="D">
<incoming>SequenceFlow_0q9hqs6</incoming>
<incoming>SequenceFlow_1q4991g</incoming>
<outgoing>SequenceFlow_17k5zfg</outgoing>
</task>
<task type="goal" id="Task_032o8jx" name="C">
<incoming>SequenceFlow_15fmkbq</incoming>
<incoming>SequenceFlow_0vg7sax</incoming>
<outgoing>SequenceFlow_0q9hqs6</outgoing>
<outgoing>SequenceFlow_1tszkq8</outgoing>
</task>
<task type="goal" id="Task_0fsibap" name="H">
<incoming>SequenceFlow_0f4gpf1</incoming>
</task>
</process>
Preciso encontrar nós de objetivo no nó inicial que:
existe um caminho para eles desde o início e não há nós de objetivo nesse caminho.
Resultado da consulta na tabela de processos comsample1
esample2
é como isso:
+-------+----------+-------------+
| ID | nodeName | nodeID |
+-------+----------+-------------+
| 1 | B |Task_00ijt4n |
+-------+----------+-------------+
| 1 | E |Task_1d4ykor |
+-------+----------+-------------+
| 2 | B |Task_0olxqpp |
+-------+----------+-------------+
| 2 | D |Task_0zjgfkf |
+-------+----------+-------------+
Seria muito útil se alguém pudesse explicar a solução para esta consulta.
Obrigado.