9

このようにhierarchyIdを挿入したいと思います

  • / - CEO (ルート)
    • /1/- 購入マネージャ
      • /1/1/- エグゼクティブの購入
    • /2/- 営業部長
      • /2/1/- 営業責任者

これは私が使用したい階層です。それは正しいものですか?もしそうなら、どうすればこれを行うことができますか?コードスニペットを教えてください。

4

2 に答える 2

18

データ型に関する情報を検索しているときにこの質問に出くわし、hierarchyid私の後に来る他の誰かがhierarchyid、質問に従って s を挿入するコードも見るのは興味深いと思いました。

これらが s を挿入する唯一の方法であるとhierarchyidは言いませんが、私のように、このデータ型を扱った経験がない人の助けになることを願っています。

この表を使って、

create table OrgChart
(
    Position hierarchyid,
    Title nvarchar(50)
)

Parseを使用hierarchyidして、文字列パスを使用して s を直接挿入できます。

insert into OrgChart(Position, Title) 
    values  (hierarchyid::Parse('/'), 'CEO'),
            (hierarchyid::Parse('/1/'), 'Purchase Manager'),
            (hierarchyid::Parse('/1/1/'), 'Purchase Executive'),
            (hierarchyid::Parse('/2/'), 'Sales Manager'),
            (hierarchyid::Parse('/2/1/'), 'Sales Executive')

次のクエリを使用してテーブルを確認します

select Position.ToString(), * from OrgChart

hierarchyidデータ型メソッドGetRootおよびGetDescendantを使用して階層を構築することもできます。この方法はより面倒だと思いましたが、階層をプログラムで管理している場合は、これらの方法を使用する必要があると思います。

declare @root hierarchyid,
        @id hierarchyid

set @root = hierarchyid::GetRoot()

insert into OrgChart(Position, Title) values (@root, 'CEO')

set @id = @root.GetDescendant(null, null)
insert into OrgChart(Position, Title) values (@id, 'Purchase Manager')

set @id = @root.GetDescendant(@id, null)
insert into OrgChart(Position, Title) values (@id, 'Sales Manager')

select @id = Position.GetDescendant(null, null) from OrgChart where Title = 'Purchase Manager'    
insert into OrgChart(Position, Title) values (@id, 'Purchase Executive')

select @id = Position.GetDescendant(null, null) from OrgChart where Title = 'Sales Manager'    
insert into OrgChart(Position, Title) values (@id, 'Sales Executive')

他の回答で提供されているリンクを必ず確認してください。ただし、このコードを試してみることも役立つことを願っています。

于 2011-09-15T02:31:46.977 に答える