11

私は SQL Server 2008 の初心者で、HierarchyId について紹介されたばかりです。

私はSQL Server 2008 - HIERARCHYID - PART Iから学んでいます。したがって、基本的に私は記事を1行ずつたどっています.SSMSで練習しているときに、ChildIdごとに0x、0x58、0x5AC0などの16進数値が生成されることがわかりました.

私の質問は

  1. これらの 16 進値は何ですか?
  2. これらはなぜ生成され、何に使用されるのでしょうか? つまり、これらの 16 進数値はどこで使用できますか?
  3. これらのヘキサ値を制御できますか? つまり、更新できますかなど。
  4. これらのヘキサ値を調べて階層を決定する方法..どちらが親でどちらが子かをどのように判断できますか?
4

3 に答える 3

11

これらの 16 進値は、階層レベルの単純なバイナリ表現です。一般に、それらを直接使用するべきではありません。

次の例をチェックしてみてください。これは自明だと思います。それがあなたを正しい方向に導くことを願っています。

hierarchyidフィールドを持つテーブルを作成します。

CREATE TABLE groups (
    group_name       nvarchar(100)  NOT NULL,
    group_hierarchy  hierarchyid    NOT NULL
);

いくつかの値を挿入します:

INSERT INTO groups (group_name, group_hierarchy)
VALUES
    ('root',     hierarchyid::Parse('/')),
    ('domain-a', hierarchyid::Parse('/1/')),
    ('domain-b', hierarchyid::Parse('/2/')),
    ('sub-a-1',  hierarchyid::Parse('/1/1/')),
    ('sub-a-2',  hierarchyid::Parse('/1/2/'));

テーブルをクエリします。

SELECT 
    group_name,
    group_hierarchy.ToString()
FROM
    groups
WHERE
    (group_hierarchy.IsDescendantOf(hierarchyid::Parse('/1/')) = 1);
于 2009-12-17T21:49:19.863 に答える
-3

具体的な質問については他の人に答えてもらいますが、IMO、SQL Server 2008 の HierarchyId は、SQL Server に対する Microsoft の最大の貢献の 1 つではありません。それらは複雑で、やや厄介です。多くの階層的なニーズに対して、共通テーブル式 (CTE) がうまく機能することがわかると思います。

ランディ

于 2009-12-16T12:36:33.090 に答える