Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL databáze 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řazovala hodnoty hierarchií 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 × logA n bitů, kde A je průměrný fanout. Uzel v organizační hierarchii 100 000 lidí s průměrným fanoutem šesti ú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í: Při zadání dvou hodnot
aabznamená,a<bže hodnota b následuje před hloubkovou první procházení stromu. 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).Podpora libovolných vložení a odstranění: Pomocí metody GetDescendant je vždy možné vygenerovat na stejné úrovni napravo od libovolné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 vytváří hodnoty hierarchií s mírně méně kompaktní reprezentací.
Kódování je omezené na 892 bajtů: Uzly, které mají v jejich reprezentaci příliš mnoho úrovní, aby se vešly do 892 bajtů, tedy nemůžou být reprezentovány typem hierarchyid .
Typ hierarchie je k dispozici pro klienty CLR (Common Language Runtime) jako SqlHierarchyId datový typ.
Remarks
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 logickou reprezentaci jako záporné číslo. Například uzel, který přichází dříve /1/1/ , může být reprezentován jako /1/-1/. Uzly nemohou mít úvodní nuly. Je například /1/1.1/ 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í ToString metoda převeďte hodnotu hierarchyid na logickou reprezentaci jako nvarchar(4000) datového typu.
Ke konverzi hierarchií na varbinarypoužijte čtení (databázový stroj) pomocí CSharp a zápisu.
Pokud chcete přenášet parametry hierarchií 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 datový typ hierarchií . Pravidla poradce pro upgrade detekují jakýkoli typ uživatele nebo sestavení s konfliktními názvy. Poradce pro upgrade doporučuje přejmenování jakéhokoli konfliktního sestavení a buď přejmenování jakéhokoli konfliktního typu, nebo použití názvů dvou částí v kódu, aby odkazovali na tento existující 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 existuje starý typ uživatele i nový typ systému. Typ uživatele je 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é se změny neprovedou 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 sloupce hierarchyid , 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 hierarchyid . Pokud používáte některou z těchto verzí, můžete data replikovat do odběratele. 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ů se podporuje, pokud filtr neobsahuje sloupec hierarchyid .
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, na SQL Serveru 2016 (13.x) nebo novější verzi.
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 neuchová.
Hodnoty sloupců s hierarchií můžou mít identické binární reprezentace ve všech databázích. Ke konfliktům může dojít v obousměrné replikaci, když logika aplikace nezávisle generuje stejnou hierarchii pro různé entity. 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 sloupců hierarchií , 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 mohou být osamocené. Nadřazený řádek vloženého řádku může být odstraněn v Publisheru. Výsledkem je nedetekovaný konflikt, když se řádek od odběratele vloží do Publisheru.
Filtry sloupců nemůžou vyfiltrovat sloupce, které nejsou s možnou hodnotou null. Vložení z odběratele se nezdaří, protože v Publisheru neexistuje žádná výchozí hodnota sloupce hierarchyid .
Filtrování řádků se podporuje, pokud filtr neobsahuje sloupec hierarchyid .