Megosztás a következőn keresztül:


hierarchiaazonosító adattípus-metódusreferenciája

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

A hierarchiaazonosító adattípus változó hosszúságú, rendszeradattípus. A hierarchia pozícióját hierarchiaazonosító használatával jelölheti. A hierarchia típusú oszlopok nem jelölik automatikusan a fát. Az alkalmazás feladata hierarchiaazonosító értékek létrehozása és hozzárendelése oly módon, hogy a sorok közötti kívánt kapcsolat tükröződjön az értékekben.

A hierarchiaazonosító adattípus értéke egy fahierarchiában lévő pozíciót jelöl. A hierarchiaazonosító értékei a következő tulajdonságokkal rendelkeznek:

  • Rendkívül kompakt: Az n csomópontokkal rendelkező fák csomópontjainak ábrázolásához szükséges bitek átlagos száma az átlagos kifaragótól (a csomópontok gyermekeinek átlagos számától) függ. A kis kifúvatások (0-7) esetében a méret körülbelül 6 * logA n bit, ahol az A az átlagos kifúvatás. Egy 100 000 fős szervezeti hierarchia csomópontja, amelynek átlagosan hat szintje van, körülbelül 38 bitet vesz igénybe. Ez 40 bitre vagy 5 bájtra kerekítve van a tároláshoz.

  • Az összehasonlítás első mélységi sorrendben történik: Két hierarchiaazonosító érték a , és bazt jelenti, a<b hogy a "b" elé kerül a fa első mélységi bejárása. Az hierarchiaazonosítón adattípusok indexei először mélységi sorrendben vannak, a mélységi első bejárásban egymáshoz közeli csomópontok pedig egymás közelében vannak tárolva. Egy rekord gyermekei például az adott rekord mellett vannak tárolva. További információ: Hierarchikus adatok (SQL Server).

  • Tetszőleges beszúrások és törlések támogatása: A GetDescendant metódussal bármikor létrehozhat egy testvért az adott csomóponttól jobbra, egy adott csomóponttól balra vagy két testvér között. Az összehasonlító tulajdonság akkor marad fenn, ha tetszőleges számú csomópontot szúr be vagy töröl a hierarchiából. A legtöbb beszúrás és törlés megőrzi a tömörítési tulajdonságot. A két csomópont közötti beszúrások azonban hierarchiaazonosító értékeket eredményeznek, kissé kevésbé kompakt megjelenítéssel.

  • A kódolás legfeljebb 892 bájt lehet: Ezért azok a csomópontok, amelyeknek túl sok szintje van a reprezentációjukban ahhoz, hogy 892 bájtba illeszkedjenek, nem jelölhetők hierarchiaazonosító-típussal .

A hierarchiaazonosító típusa adattípusként SqlHierarchyId a gyakori nyelvi futtatókörnyezeti (CLR-) ügyfelek számára érhető el.

Remarks

A hierarchiaazonosító típus logikailag kódolja a hierarchiafában lévő egyetlen csomópont adatait a fa gyökerétől a csomópontig vezető útvonal kódolásával. Az ilyen elérési út logikailag a gyökér után meglátogatott összes gyermek csomópontcímkéinek sorozataként jelenik meg. A perjel elindítja a reprezentációt, és a csak a gyökérre mutató elérési utat egyetlen perjel jelöli. A gyökér alatti szintek esetében minden címke pontokkal elválasztott egész számok sorozataként van kódolva.

A gyermekek összehasonlítása a pontokkal elválasztott egész számsorozatok szótári sorrendben történő összehasonlításával történik. Minden szintet perjel követ. Ezért a perjel elválasztja a szülőket a gyermekeiktől. A következők például érvényes hierarchiaazonosító 1, 2, 2, 3 és 3 hosszúságú elérési utak:

  • /
  • /1/
  • /0.3.-7/
  • /1/3/
  • /0.1/0.2/

A csomópontok bármely helyre beszúrhatók. Az után /1/2/ , de előtte /1/3/ beszúrt csomópontok a következőképpen jeleníthetők meg /1/2.5/: . A beszúrt 0 csomópontok logikai ábrázolása negatív számként. A korábban /1/1/ megjelenő csomópontok például a következőként /1/-1/ábrázolhatók: . A csomópontok nem tartalmazhatnak kezdő nullákat. Például érvényes, /1/1.1/ de /1/1.01/ nem érvényes. A hibák elkerülése érdekében szúrjon be csomópontokat a GetDescendant metódussal.

Adattípus-átalakítás

A hierarchiaazonosító adattípus az alábbiak szerint konvertálható más adattípusokká:

  • A ToString metódussal a hierarchiaazonosító értékét nvarchar(4000) adattípusú logikai ábrázolásúvá alakíthatja.

  • Használja az Olvasás (Adatbázismotor) parancsot a CSharp és az Írás használatával, hogy a hierarchiaazonosítótvarbinárissá konvertálja.

  • Ha hierarchiaazonosító paramétereket szeretne továbbítani a SOAP-on keresztül, először sztringekként adja meg őket.

Adatbázisok frissítése

Amikor egy adatbázist az SQL Server újabb verziójára frissít, a rendszer automatikusan telepíti az új szerelvényt és a hierarchiaazonosító adattípust . A frissítési tanácsadói szabályok észlelik az ütköző névvel rendelkező felhasználói típusokat vagy szerelvényeket. A frissítési tanácsadó azt javasolja, hogy nevezz át bármilyen ütköző szerelvényt, és nevezz át bármilyen ütköző típust, vagy használj kétrészes neveket a kódban, hogy hivatkozz az előző felhasználói típusra.

Ha egy adatbázis-frissítés ütköző nevű felhasználói szerelvényt észlel, automatikusan átnevezi a szerelvényt, és gyanús módba helyezi az adatbázist.

Ha a frissítés során ütköző nevű felhasználótípus létezik, nem történik speciális lépés. A frissítés után a régi és az új rendszertípus is létezik. A felhasználói típus csak kétrészes neveken érhető el.

Hierarchiaazonosító oszlopok használata replikált táblákban

A hierarchiaazonosító típusú oszlopok bármely replikált táblában használhatók. Az alkalmazás követelményei attól függenek, hogy a replikáció egyirányú vagy kétirányú-e, valamint az SQL Server használt verzióitól.

Egyirányú replikáció

Az egyirányú replikáció tartalmazza a pillanatkép-replikációt, a tranzakciós replikációt és az olyan egyesítési replikációt, amelyben nem történik módosítás az előfizetőnél. Az, hogy hierarchiaazonosító oszlopok hogyan működnek egy irányított replikációval, az az előfizető által futtatott SQL Server verziójától függ.

  • Az SQL Server Publisher speciális szempontok nélkül replikálhat hierarchiaazonosítót oszlopokat egy azonos verziójú SQL Server-előfizetőre.

  • Az SQL Server Publishernek hierarchiaazonosító oszlopokat kell konvertálnia, hogy azokat az SQL Server Compact vagy az SQL Server korábbi verzióját futtató előfizetőkké replikálja. Az SQL Server Kompakt és korábbi verziói nem támogatják a hierarchia típusú oszlopokat. Ha ezen verziók egyikét használja, akkor is replikálhatja az adatokat egy előfizetőnek. Ehhez meg kell adnia egy sémabeállítást vagy a kiadvány kompatibilitási szintjét (az egyesítési replikációhoz), hogy az oszlop kompatibilis adattípussá alakítható legyen.

Az oszlopszűrés mindkét esetben támogatott. Ez magában foglalja hierarchiaazonosító oszlopok szűrését is. A sorszűrés mindaddig támogatott, amíg a szűrő nem tartalmaz hierarchiaazonosító oszlopot.

Kétirányú replikáció

A kétirányú replikáció magában foglalja az előfizetések frissítésével, a társközi tranzakciós replikációval és az előfizetőnél végrehajtott módosítások egyesítésével kapcsolatos tranzakciós replikációt. A replikáció lehetővé teszi egy tábla konfigurálását hierarchiaazonosítóval oszlopokkal a kétirányú replikációhoz. Vegye figyelembe az alábbi követelményeket és szempontokat.

  • A Publishernek és az összes előfizetőnek ugyanazt a verziót kell futtatnia az SQL Server 2016-on (13.x) vagy egy újabb verzióban.

  • A replikáció bájtként replikálja az adatokat, és nem végez ellenőrzést a hierarchia integritásának biztosítása érdekében.

  • A forrásnál (előfizetőnél vagy közzétevőnél) végrehajtott módosítások hierarchiája nem marad fenn a célhelyre replikáláskor.

  • A hierarchiaazonosító oszlopok értékei minden adatbázisban azonos bináris reprezentációkkal rendelkezhetnek. Ütközések akkor fordulhatnak elő a kétirányú replikációban, ha az alkalmazáslogika egymástól függetlenül hozza létre ugyanazt a hierarchiaazonosítót a különböző entitásokhoz. Ezért ugyanez az érték létrehozható a Közzétevőn és az Előfizetőn, de különböző sorokra is alkalmazható. A replikáció nem ellenőrzi ezt a feltételt, és nincs beépített módszer a hierarchiaazonosító oszlopértékek particionálására, mint az oszlopok esetében IDENTITY . Az alkalmazásoknak kényszereket vagy más mechanizmusokat kell használniuk az ilyen nem észlelt ütközések elkerülése érdekében.

  • Lehetséges, hogy az Előfizetőre beszúrt sorok árvaak lehetnek. Előfordulhat, hogy a beszúrt sor szülősora törölve lesz a Publisherben. Ez észrevétlen ütközést eredményez, amikor az Előfizető sorát beszúrja a Közzétevőbe.

  • Az oszlopszűrők nem képesek kiszűrni a nem null értékű hierarchia típusú oszlopokat. Az előfizetői beszúrások sikertelenek, mert a Publisher hierarchiaazonosító oszlopának nincs alapértelmezett értéke.

  • A sorszűrés mindaddig támogatott, amíg a szűrő nem tartalmaz hierarchiaazonosító oszlopot.