Ich habe selbständige Entitäten (a) in meiner Datenbank, die von einer anderen Entität (b) referenziert werden, und eine bestimmte (b) Entität gegeben, muss ich alle (a) Entitäten, die benötigt werden. Dies sind viele zu viele Zuordnungen, daher habe ich eine separate Zuordnungstabelle. Ich denke, eine rekursive Select mit einem CTE ist meine beste Wette, aber ich stoße auf ein Problem:T-SQL Rekursive Wählen Kreisförmige Abhängigkeit
This Fiddle veranschaulicht mein Problem. Wenn ein Benutzer einen Zirkelverweis eingibt, wird das rekursive select zu einem quietschenden Halt. Ich habe mir das Gehirn kaputt gemacht, um einen Weg zu finden, das zu beheben. Es sollte beachtet werden, dass, obwohl ich Fremdschlüssel in die Geige eingeführt habe, Fremdschlüssel von dem System, das ich verwende, nicht wirklich geehrt werden (langwieriges Argument mit den Datenbankadministratoren) - ich habe sie eingeführt, um den Datenfluss klarer zu machen.
Die rekursive Abfrage, für diejenigen, die nicht wollen, auf der Geige durch klicken:
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
Any da draußen Ideen? Dieser Entwurf ist nicht in Produktion, daher kann ich das Schema etwas ändern, aber ich möchte nicht darauf angewiesen sein, beim Einfügen Zirkelreferenzen zu entdecken, außer es kann von T-SQL gemacht werden.
nie diese fxn verwendet, aber würde man einfach nicht sagen, 'auf objMap.masterObjID = recur.objID und recur.objID <> # otherobj.usesObjID'? oder ist das nicht möglich? – Beth