Mam jednostki zależne (a) w mojej bazie danych, do których odwołuję się od innej jednostki (b), i biorąc pod uwagę określony (b) podmiot, potrzebuję uzyskać wszystkie (a) potrzebne jednostki. Jest to wiele do wielu mapowań, więc mam oddzielny stół mapowania. Myślę, że rekursywny Select with a CTE jest moim najlepszym wyborem, ale pojawia się problem:T-SQL Recursive Select Circular dependency
This Fiddle ilustruje mój problem. Jeśli jakiś użytkownik wprowadzi odwołanie cykliczne, mój rekursywny wybór zgrzyta do piskliwego zatrzymania. Próbowałem znaleźć jakiś sposób, żeby to naprawić. Należy zauważyć, że chociaż wprowadziłem klucze obce w skrzypcach, klucze obce nie są w rzeczywistości honorowane przez system, z którego korzystam (długotrwały argument z DBA) - wprowadziłem je, aby przepływ danych był wyraźniejszy.
Zapytanie rekurencyjne dla tych, którzy nie chcą klikać na skrzypcach:
WITH recur(objID) AS (
SELECT usesObjID
FROM #otherObj
WHERE otherObjID = 1
UNION ALL
SELECT slaveObjID
FROM #objMap
INNER JOIN recur
on #objMap.masterObjID = recur.objID
)SELECT objID from recur
Wszelkie pomysły tam? Ten projekt nie jest produkowany, więc mogę nieco zmienić schemat, ale nie chciałbym polegać na wykrywaniu odwołań cyklicznych po wstawieniu, chyba że można to zrobić za pomocą T-SQL.
nigdy nie użył tego FXN, ale nie po prostu powiedzieć 'na objMap.masterObjID = recur.objID i recur.objID <> # otherobj.usesObjID'? czy jest to poza zakresem? – Beth