1

私は MS SQL 2005 を使用しています。ツリー構造を次のように定義しました。

1 
|\ 
2 3 
  /|\ 
 4 5 6 

ID を取得し、サブツリー テーブルを返す SQL 関数 Subs(id) を作成しました。したがって、Subs(3) は 3、4、5、6 の 4 行を返し、Subs(2) は 2 の 1 行を返します。

上記のIDを返すselectステートメントがあります(このツリーを他のテーブルと結合します)

上記のIDを返すselectステートメントの後に必要です
(たとえば、2行のテーブルになります:)

2
3

サブ関数を次のように実行できるようにします

Subs(2) 
union 
Subs(3).

(結果は、ID 2,3,4,5,6 の行になるはずです)

問題は、引数を渡す方法がわからず、ユニオンを動的に使用する方法がわからないことです。

このレベルでこれを解決することは可能ですか、それとも上位レベル (C#) に持ち込む必要がありますか?

4

2 に答える 2

1

ここではUNIONは必要ないと思います。SQLServer2005では、CROSSAPPLYを使用して目的の結果を得ることができます。

select 
    f.* 
from 
    resultsTable rt
    cross apply dbo.subs(rt.ID) f

これは、resultTableが最初のクエリの結果を格納するものであり、フィールドの名前がIDであると想定しています。

于 2009-03-31T13:36:47.787 に答える
-1
于 2009-03-31T13:33:30.027 に答える