С таблицей следующей структуры и выборки данных:TSQL СТЕ и График Сорта
TableActivity
-------------
Type VARCHAR(8)
Activity VARCHAR(8)
RelatedActivity VARCHAR(8)
Type Activity RelatedActivity
------------------------------------------
Start a -
Transfer a b
Start b -
Transfer b c
Start c -
Stop c -
Transfer c b
Stop b -
Transfer b a
Stop a -
было бы возможно написать запрос КТР выполнить следующее:
GetActivities('a')
Order Activities
-------------------
0 a
1 b
2 c
I «Мне тяжело писать то, что перестает возвращать строки в рекурсивном выражении.
Любые идеи?
Редактировать
Для уточнения GetActivities ('A'). Эта функция должна найти действие «Старт» «a» и продолжить поиск каких-либо действий «Передача» на «a». В этом случае функция может затем возвращаться с помощью «b» и, следовательно, «c» с данными выборки. Запрос должен возвращать все действия, связанные с 'a' через 'Transfers'. Это вложение деятельности может идти настолько глубоко, насколько это необходимо, и неизвестно (поэтому нет союзов). Трудность, с которой я сталкиваюсь, заключается в том, что есть еще один «Передача», например, 'b' -> 'a'. Вы можете видеть, как это создало бы цикл в рекурсивном запросе.
Еще одно уточнение: переводы в таблице действий ведут себя как стек. Вот как данные заселены в таблице (в C#):
using (Activity.Start("a"))
{
// transfer to 'b' under covers
using (Activity.Start("b"))
{
// transfer to 'c' under covers
using (Activity.Start("c"))
{
}
// transfer to 'b' under covers
}
// transfer to 'a' under covers
}
Не будет обрабатывать более крупный цикл. добавьте «UNION SELECT« Transfer »,« c »,« a »на ваш пример. –
К счастью, этот случай не будет выполняться в моем приложении: обход действий ведет себя как стек. – jsw
Ах. Это гораздо более простой случай, чем дело с общим ориентированным графом, который имеет циклы. –