1

階層列を追加したばかりのデータベース テーブルがあります。他に関連する唯一の列は ID 列 (主キー) です。ID = 1 のエントリがルートです (HierarchyID::GetRoot() に設定)。階層内に子を作成することはできますが、既存のデータを繰り返し処理して残りのすべてのエントリをルートの子にする方法がわかりません。私の試みはすべて、他のすべての行が同じ階層値を持つことになります。

IE - 階層は次のようになります。

ID | Hierarchy
-------------
1  | /
2  | /1
3  | /2
etc

私の試みはすべて次のようになります

ID | Hierarchy
-------------
1  | /
2  | /1
3  | /1
etc

テーブルにデータを入力するために使用できる単純な更新ステートメントまたはカーソル ループの形式はありますか? Hierarchy.ToString() が /# の # を ID と等しくするように設定する方法はありますか? (これは素晴らしいことですが、必要とはほど遠いです。

前もって感謝します。

4

1 に答える 1

1

文字列を作成して、 hierarchyid::ParseIDのパラメーターとして使用できます。

update T
set Hierarchy = case when ID = 1 
                  then hierarchyid::GetRoot() 
                  else hierarchyid::Parse('/'+cast(ID as varchar(10))+'/') 
                end

SQL フィドル

于 2013-08-05T12:14:09.000 に答える