私のデータベースには、別のエンティティ(b)から参照される自己依存エンティティ(a)があり、特定の(b)エンティティを指定すると、 a)必要なエンティティ。これらは多対多のマッピングであるため、私は別々のマッピングテーブルを持っています。 CTEを使用した再帰的なSelectは最善の策だと思いますが、問題にぶつかっています:T-SQL Recursive Select循環依存性
This Fiddleが私の問題を示しています。一部のユーザーが循環参照を導入した場合、私の再帰的選択は急に停止するようになります。私はこの問題を解決する方法を見つけるために私の脳を悩ましてきました。私が使用しているシステムでは、外部キーは実際には賞賛されません(DBAとの長期にわたる議論) - データフローをより明確にするためにそれらを導入しました。
フィドルにクリックスルーしたくない人のために再帰クエリ、:そこ
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
任意のアイデア?この設計は本番ではないので、私は幾分スキーマを変更することができますが、T-SQLで行うことができない限り、挿入時に循環参照を検出することには依存しません。
はこのFXNを使用することはありませんが、あなたは単に 'objMap.masterObjID = recur.objID上とrecur.objID <>#otherobj.usesObjID'言わないだろうか?それは範囲外ですか? – Beth