2

再帰を実行しているCTEがあります。問題のある空間を想像する最も簡単な方法は、世界中の車で使用されている抵抗器であり、そのすべての情報を入手できます。抵抗器Aは、車のAAA、AAB、およびAACで使用されるDashAssembly D、E、F...ZZで使用されるボードBおよびCで使用されます。

CTEを1つのパーツで動作させ、結果を確認しました。すべて問題ありません(MAXRECURSION 100を使用)。次に、パーツツリーでもう少し一般的なパーツを追加します。ブーム、壊れた。MAXRECURSIONを32767に上げてみましたが、それでも壊れました。データを見ると、この特定の部分がいたるところに使用されています。再帰の第2レベルでは、426人の親がいます。など、6レベルの再帰だと思います。これがMAXRECURSIONを爆撃していることは理にかなっています(私は思います)。

次の質問は、プランBとは何ですか?CTEを使用しない再帰を行ったことがありません。

更新:答えは次のとおりです。循環参照がないことを確認し、再帰テーブルがその結合を適切にフィルタリングしていることを確認してください(2番目の参照は適切に実行しませんでした)。基本的に、私はうんざりして、代わりにそれが私のくだらないSQLスキルであるときに問題となったのは、私のクレイジーなワイルドデータだと思いました。

4

1 に答える 1

1

ほとんどの場合、再帰制限に達した場合、制限を$ BIGNUMに上げても、それでも到達します。つまり、循環参照があります。

循環参照がないこと、および再帰テーブルが適切にフィルタリングされていることを確認する必要があります。

于 2009-02-23T23:11:34.930 に答える