Hierarchyid – referenční dokumentace metody datového typu
platí pro:SQL ServerAzure SQL Databaseazure SQL Managed InstanceSQL Database v Microsoft Fabric
Datový typ hierarchyid je proměnná délka, systémový datový typ. K reprezentaci pozice v hierarchii použijte id hierarchie. Sloupec typu hierarchyid automaticky nepředstavuje strom. Je na aplikaci, aby vygenerovala a přiřadila hierarchyid hodnoty takovým způsobem, aby se požadovaný vztah mezi řádky projevil v hodnotách.
Hodnota id hierarchie představuje pozici ve stromové hierarchii. Hodnoty id hierarchie mají následující vlastnosti:
- Extrémně kompaktní
Průměrný počet bitů potřebných k reprezentaci uzlu ve stromu s n uzly závisí na průměrném fanoutu (průměrný počet podřízených položek uzlu). U malých fanoutů (0–7) je velikost přibližně 6*logAn bitů, kde A je průměrný fanout. Uzel v organizační hierarchii 100 000 lidí s průměrným fanoutem 6 úrovní trvá asi 38 bitů. To je zaokrouhleno až na 40 bitů nebo 5 bajtů pro úložiště. - Porovnání je v podrobném pořadí.
Když hodnotyhierarchii a b , znamená, že při prvním procházení stromu do hloubky b. Indexy hierarchií datových typů jsou v podrobném pořadí a uzly blízko sebe v hloubkové první procházení se ukládají blízko sebe. Například podřízené položky záznamu se ukládají vedle tohoto záznamu. Další informace naleznete v tématu hierarchická data (SQL Server).b - Podpora libovolných vložení a odstranění
Pomocí metody GetDescendant je vždy možné vygenerovat na stejné úrovni napravo od libovolného daného uzlu, nalevo od jakéhokoli daného uzlu nebo mezi všemi dvěma elementy na stejné úrovni. Vlastnost porovnání se udržuje při vložení nebo odstranění libovolného počtu uzlů z hierarchie. Většina vložení a odstranění zachovává vlastnost kompaktnosti. Vložení mezi dva uzly ale vytvoří hodnoty hierarchií s mírně méně kompaktní reprezentací. - Kódování použité v hierarchii typu je omezeno na 892 bajtů. Uzly, které mají v reprezentaci příliš mnoho úrovní, aby se vešly do 892 bajtů, nelze reprezentovat hierarchií typu.
Typ hierarchie
Poznámky
Typ hierarchyid logicky kóduje informace o jednom uzlu ve stromu hierarchie kódováním cesty z kořenového adresáře stromu do uzlu. Taková cesta je logicky reprezentována jako posloupnost popisků uzlů všech podřízených položek navštívených po kořenovém adresáři. Lomítko spustí reprezentaci a cesta, která navštíví pouze kořen, je reprezentována jediným lomítkem. U úrovní pod kořenem se každý popisek zakóduje jako posloupnost celých čísel oddělených tečkami. Porovnání mezi podřízenými položkami se provádí porovnáním celých číselných sekvencí oddělených tečkami v pořadí slovníku. Za každou úrovní následuje lomítko. Proto lomítko odděluje rodiče od svých dětí. Například následující jsou platné hierarchiiid cesty délky 1, 2, 2, 3 a 3 úrovně:
/
/1/
/0.3.-7/
/1/3/
/0.1/0.2/
Uzly lze vložit do libovolného umístění. Uzly vložené za /1/2/, ale před /1/3/ mohou být reprezentovány jako /1/2.5/. Uzly vložené před 0 mají logickou reprezentaci jako záporné číslo. Například uzel před /1/1/ může být reprezentován jako /1/-1/. Uzly nemohou mít úvodní nuly. Například /1/1.1/ je platný, ale /1/1.01/ není platný. Chcete-li zabránit chybám, vložte uzly pomocí metody GetDescendant.
Převod datového typu
Datový typ hierarchyid lze převést na jiné datové typy následujícím způsobem:
- Pomocí metody
ToString() převeďte hodnotu hierarchyid na logickou reprezentaci jakonvarchar(4000) datového typu. - K převodu
varbinárního použijte čtenía zápisu (). - Pokud chcete přenést hierarchyid parametry prostřednictvím protokolu SOAP, nejprve je přetypujte jako řetězce.
Upgrade databází
Při upgradu databáze na novější verzi SQL Serveru se automaticky nainstaluje nové sestavení a hierarchyid datového typu. Pravidla poradce pro upgrade detekují jakýkoli typ uživatele nebo sestavení s konfliktními názvy. Poradce pro upgrade doporučí přejmenování jakéhokoli konfliktního sestavení a buď přejmenování jakéhokoli konfliktního typu, nebo použití dvoudílných názvů v kódu, aby odkazovali na tento předchozí typ uživatele.
Pokud upgrade databáze zjistí uživatelské sestavení s konfliktním názvem, automaticky toto sestavení přejmenuje a umístí databázi do podezřelého režimu.
Pokud během upgradu existuje typ uživatele s konfliktním názvem, neprovedou se žádné zvláštní kroky. Po upgradu bude existovat starý typ uživatele i nový typ systému. Typ uživatele bude k dispozici pouze prostřednictvím dvoudílných názvů.
Použití sloupců hierarchií v replikovaných tabulkách
Sloupce typu hierarchyid lze použít v jakékoli replikované tabulce. Požadavky vaší aplikace závisí na tom, jestli je replikace jednosměrná nebo obousměrná, a na verzích SQL Serveru, které se používají.
Jednosměrná replikace
Jednosměrná replikace zahrnuje replikaci snímků, transakční replikaci a slučovací replikaci, ve které nejsou provedeny změny u odběratele. Jak hierarchyid sloupce fungují s jednou směrovou replikací, závisí na verzi SYSTÉMU SQL Server, na které je odběratel spuštěný.
- Sql Server Publisher může replikovat hierarchiiid sloupce do odběratele SQL Serveru stejné verze bez jakýchkoli zvláštních aspektů.
- Sql Server Publisher musí převést hierarchiiid sloupce, aby je replikoval na odběratele, na kterém běží SQL Server Compact nebo starší verze SQL Serveru. SQL Server Compact a starší verze SQL Serveru nepodporují sloupce hierarchii. Pokud používáte některou z těchto verzí, můžete stále replikovat data odběrateli. K tomu je nutné nastavit možnost schématu nebo úroveň kompatibility publikace (pro slučovací replikaci), aby se sloupec mohl převést na kompatibilní datový typ.
Filtrování sloupců se podporuje v obou těchto scénářích. To zahrnuje filtrování sloupců hierarchií. Filtrování řádků je podporováno, pokud filtr neobsahuje hierarchii sloupec.
Obousměrná replikace
Obousměrná replikace zahrnuje transakční replikaci s aktualizací předplatných, transakční replikaci mezi dvěma účastníky a slučovací replikaci, ve které se provádějí změny u odběratele. Replikace umožňuje nakonfigurovat tabulku s hierarchií sloupců pro obousměrnou replikaci. Poznamenejte si následující požadavky a důležité informace.
- Vydavatel a všichni předplatitelé musí mít stejnou verzi SQL Serveru 2016 (13.x) nebo novější.
- Replikace replikuje data jako bajty a neprovádí žádné ověření, aby se zajistila integrita hierarchie.
- Hierarchie změn provedených ve zdroji (odběrateli nebo vydavateli) se při replikaci do cíle neudržuje.
- Hodnoty hash pro hierarchyid sloupce jsou specifické pro databázi, ve které jsou generovány. Proto se stejná hodnota může vygenerovat u vydavatele a odběratele, ale dá se použít na různé řádky. Replikace nekontroluje tuto podmínku a neexistuje žádný předdefinovaný způsob, jak rozdělit hodnoty hierarchii sloupcích, protože existují sloupce IDENTITY. Aplikace musí používat omezení nebo jiné mechanismy, aby se zabránilo takovým nedetekovaným konfliktům.
- Je možné, že řádky vložené do odběratele budou osamocené. Nadřazený řádek vloženého řádku byl pravděpodobně odstraněn v Publisheru. Výsledkem je nedetekovaný konflikt, když se řádek od odběratele vloží do Publisheru.
- Filtry sloupců nemůžou vyfiltrovat nenulové sloupce hierarchii: vložení z odběratele selže, protože pro sloupec hierarchyid v publisheru neexistuje výchozí hodnota.
- Filtrování řádků je podporováno, pokud filtr neobsahuje hierarchii sloupec.
Viz také
referenční metody datového typu hierarchie