<と同様のファイルとフォルダ構造をモデル化するテーブルを含むSQL Server 2008 R2データベースの商用アプリケーションがあります。<サブレベル1 >:< sublevel 2> .. < sublevel n>:<ドキュメント>。データベーステーブルには値のペア(folder_item、parent)が含まれています。ここで、folder-itemはドキュメントまたはフォルダで、parentはテーブル内の別の行へのリンクです。データ構造が最適でないSQL Serverの再帰的階層型クエリ
は、私は、行ごとに2つの値を返すクエリを記述しようとしています:
- 文書
- 文書の直接のコンテナに最上位フォルダから文書への完全連結パス、たとえば、ルート:レベル1:レベル2 ..:レベルN。
通常、再帰的クエリはこの状況を処理できるはずですが、複雑さがあります。 Folder Itemテーブルには、各ドキュメントとサブレベルの冗長エントリが含まれており、それらの直上の親だけでなく、フォルダ構造内のすべての祖先とペアリングされます。
代わりの (文書、親) (親、祖父母) (祖父母、偉大-祖父母) ... (祖先、根)
表は (文書、親)が含まれてい (文書、祖父母) ... (文書、祖先) (ドキュメントルート) (親、祖父母) ... (親、祖先) (親、根) ... (祖父母、おじいさん) ... (祖父母、ルート)
などです。私はデータモデラーが設計の理由を持っていたと確信していますが、標準的な再帰的な階層的なクエリの使用を否定します。実際、試してみると、実行は最大再帰レベル数を超えました。
誰もが同様の問題を抱えていますが、標準のSQL機能を超えた複雑なプログラミングに頼らなくても解決できますか?
おかげで多くの
パトリックあなたが持っていれば
テーブル構造とサンプルデータを投稿するのはどうですか?あなたが単純にその名の上にあなたの再帰を基盤としているなら、あなたは敗北の戦いと戦う可能性が高いでしょう。 –
再帰は、一意ですが非PK VARCHAR値 "DOCNUMBER"に基づいています。ここで、PARENT列には祖先行のDOCNUMBERが含まれています。 –
幸運なことに、既存のフォルダ階層を無視することが決定され、(賢明な)ビジネス上の決定のために問題が消滅したことが判明しました。答えるためにショーンとタブのおかげで.. –