Dela via


hierarchyid-metodreferens för datatyp

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

hierarchyid datatyp är en variabel längd, systemdatatyp. Använd hierarchyid för att representera position i en hierarki. En kolumn av typen hierarchyid representerar inte automatiskt ett träd. Det är upp till programmet att generera och tilldela hierarchyid värden på ett sådant sätt att den önskade relationen mellan rader återspeglas i värdena.

Ett värde för hierarchyid datatyp representerar en position i en trädhierarki. Värden för hierarchyid ha följande egenskaper:

  • Extremt kompakt
    Det genomsnittliga antalet bitar som krävs för att representera en nod i ett träd med n noder beror på den genomsnittliga utfläkten (det genomsnittliga antalet underordnade noder). För små fanouts (0–7) är storleken cirka 6*logAn bitar, där A är den genomsnittliga fanouten. En nod i en organisationshierarki på 100 000 personer med en genomsnittlig fanout på 6 nivåer tar cirka 38 bitar. Detta avrundas upp till 40 bitar, eller 5 byte, för lagring.
  • Jämförelsen är i djupordning
    Givet två hierarchyid-värdenen och binnebär en<b att en kommer före b i en djup-första b-b i trädets djup-första b-traversering. Index på hierarkiid datatyper är i djupordning, och noder nära varandra i en djup-första bläddering lagras nära varandra. Till exempel lagras underordnade poster i anslutning till posten. Mer information finns i Hierarkiska data (SQL Server).
  • Stöd för godtyckliga infogningar och borttagningar
    Genom att använda metoden GetDescendant är det alltid möjligt att generera ett syskon till höger om en viss nod, till vänster om en viss nod eller mellan två syskon. Jämförelseegenskapen bibehålls när ett godtyckligt antal noder infogas eller tas bort från hierarkin. De flesta infogningar och borttagningar bevarar kompakthetsegenskapen. Infogningar mellan två noder ger dock hierarkiidvärden med en något mindre kompakt representation.
  • Kodningen som används i hierarchyid typ är begränsad till 892 byte. Därför kan noder som har för många nivåer i sin representation för att passa in i 892 byte inte representeras av hierarchyid typ.

hierarchyid typ är tillgänglig för CLR-klienter som SqlHierarchyId datatyp.

Anmärkningar

hierarchyid typ kodar logiskt information om en enskild nod i ett hierarkiträd genom att koda sökvägen från trädets rot till noden. En sådan sökväg representeras logiskt som en sekvens med nodetiketter för alla underordnade som besöks efter roten. Ett snedstreck startar representationen och en sökväg som bara besöker roten representeras av ett enda snedstreck. För nivåer under roten kodas varje etikett som en sekvens med heltal avgränsade med punkter. Jämförelse mellan underordnade utförs genom att jämföra heltalssekvenserna avgränsade med punkter i ordlisteordning. Varje nivå följs av ett snedstreck. Därför separerar ett snedstreck föräldrar från sina barn. Följande är till exempel giltiga hierarchyid sökvägar med längder 1, 2, 2, 3 respektive 3 nivåer:

  • /

  • /1/

  • /0.3.-7/

  • /1/3/

  • /0.1/0.2/

Noder kan infogas på valfri plats. Noder som infogats efter /1/2/ men innan /1/3/ kan representeras som /1/2.5/. Noder som infogas före 0 har den logiska representationen som ett negativt tal. Till exempel kan en nod som kommer före /1/1/ representeras som /1/-1/. Noder kan inte ha inledande nollor. Till exempel är /1/1.1/ giltig, men /1/1.01/ är inte giltig. För att förhindra fel infogar du noder med hjälp av metoden GetDescendant.

Konvertering av datatyp

hierarchyid datatyp kan konverteras till andra datatyper på följande sätt:

  • Använd metoden ToString() för att konvertera värdet hierarchyid till den logiska representationen som en nvarchar(4000) datatyp.
  • Använd Read () och Write () för att konvertera hierarchyid till varbinary.
  • Om du vill överföra hierarkiid parametrar via SOAP först kasta dem som strängar.

Uppgradera databaser

När en databas uppgraderas till en nyare version av SQL Server installeras automatiskt den nya sammansättningen och hierarchyid datatypen. Regler för uppgraderingsrådgivare identifierar alla användartyper eller sammansättningar med motstridiga namn. Uppgraderingsrådgivaren rekommenderar att du byter namn på en sammansättning som är i konflikt och antingen byter namn på någon konflikttyp eller använder tvådelade namn i koden för att referera till den befintliga användartypen.

Om en databasuppgradering identifierar en användarsammansättning med motstridiga namn byter den automatiskt namn på sammansättningen och placerar databasen i misstänkt läge.

Om det finns en användartyp med ett namn som står i konflikt under uppgraderingen vidtas inga särskilda åtgärder. Efter uppgraderingen finns både den gamla användartypen och den nya systemtypen. Användartypen är endast tillgänglig via tvådelade namn.

Använda hierarchyid-kolumner i replikerade tabeller

Kolumner av typen hierarchyid kan användas i valfri replikerad tabell. Kraven för ditt program beror på om replikeringen är en riktning eller dubbelriktad, och på de versioner av SQL Server som används.

Replikering i en riktning

Enriktad replikering omfattar replikering av ögonblicksbilder, transaktionsreplikering och sammanslagningsreplikering där ändringar inte görs hos prenumeranten. Hur hierarkiid kolumner fungerar med en riktningsreplikering beror på vilken version av SQL Server prenumeranten kör.

  • En SQL Server Publisher kan replikera hierarchyid kolumner till en SQL Server-prenumerant av samma version utan några särskilda överväganden.
  • En SQL Server Publisher måste konvertera hierarchyid kolumner för att replikera dem till en prenumerant som kör SQL Server Compact eller en tidigare version av SQL Server. SQL Server Compact och tidigare versioner av SQL Server stöder inte hierarchyid kolumner. Om du använder någon av dessa versioner kan du fortfarande replikera data till en prenumerant. För att göra detta måste du ange ett schemaalternativ eller publikationens kompatibilitetsnivå (för sammanslagningsreplikering) så att kolumnen kan konverteras till en kompatibel datatyp.

Kolumnfiltrering stöds i båda dessa scenarier. Detta omfattar filtrering av hierarchyid kolumner. Radfiltrering stöds så länge filtret inte innehåller en hierarchyid kolumn.

Dubbelriktad replikering

Dubbelriktad replikering omfattar transaktionsreplikering med uppdatering av prenumerationer, peer-to-peer-transaktionsreplikering och sammanslagningsreplikering där ändringar görs hos prenumeranten. Med replikering kan du konfigurera en tabell med hierarchyid kolumner för dubbelriktad replikering. Observera följande krav och överväganden.

  • Utgivaren och alla prenumeranter måste köra samma version av SQL Server 2016 (13.x) eller senare.
  • Replikering replikerar data som byte och utför ingen verifiering för att säkerställa hierarkins integritet.
  • Hierarkin för de ändringar som gjordes i källan (prenumerant eller utgivare) behålls inte när de replikeras till målet.
  • Hash-värdena för hierarchyid kolumner är specifika för databasen där de genereras. Därför kan samma värde genereras på utgivaren och prenumeranten, men det kan tillämpas på olika rader. Replikeringen söker inte efter det här villkoret och det finns inget inbyggt sätt att partitionera hierarkiid kolumnvärden som det finns för IDENTITY-kolumner. Program måste använda begränsningar eller andra mekanismer för att undvika sådana oupptäckta konflikter.
  • Det är möjligt att rader som infogas i prenumeranten blir överblivna. Den överordnade raden för den infogade raden kan ha tagits bort i Publisher. Detta resulterar i en oidentifierad konflikt när raden från Prenumeranten infogas i Publisher.
  • Kolumnfilter kan inte filtrera bort icke-nullbara hierarchyid kolumner: infogningar från Prenumeranten misslyckas eftersom det inte finns något standardvärde för kolumnen hierarchyid i Publisher.
  • Radfiltrering stöds så länge filtret inte innehåller en hierarchyid kolumn.

Se även

(Hierarchical Data)
hierarchyid Data Type Method Reference