hierarchyid (języka Transact-SQL)
hierarchyid Ma typ danych o zmiennej długości, typ danych systemu.Użycie hierarchyid do reprezentowania pozycji w hierarchii.kolumna typu hierarchyid automatycznie reprezentują drzewa.Jest do stosowania do generowania i przypisywania hierarchyid wartości w taki sposób, że żądaną relację między wierszami są odzwierciedlone w wartości.
Wartość hierarchyid Typ danych reprezentuje pozycję w hierarchii drzewa.Wartości hierarchyid , mają następujące właściwości:
Bardzo zwarte
Średnia liczba bitów, które są wymagane do reprezentowania węzła w drzewie z n węzły zależy od średniego fanout (średnia liczba dzieci węzła).Dla małych fanouts (0-7), rozmiar wynosi około 6 * dziennikaan bitów, gdzie a jest średnia fanout.Węzeł w hierarchii organizacyjnej 100 000 osób ze średnią fanout 6 poziomów zajmuje około 38 bitów.To jest zaokrąglana w górę do 40 bitów lub 5 bajtów dla magazynu.
Porównanie jest w kolejności głębokości pierwszy
Biorąc pod uwagę dwa hierarchyid wartości i b, <b oznacza wcześniejsza b w przechodzenie pierwszego Głębokość drzewa.Indeksy na hierarchyid typy danych są w kolejności głębokości pierwszy i węzłów zbliżone do siebie na przechodzenie głębokość pierwszej znajdują się blisko siebie.Na przykład dzieci rekordu są przechowywane w przyległych do tego rekordu.Aby uzyskać więcej informacji, zobacz Typy danych hierarchyid (aparat bazy danych).
Wsparcie dla dowolnego wstawienia i usunięcia
Za pomocą GetDescendant metodazawsze możliwe jest wygenerowanie równorzędny prawo danego węzła po lewej stronie danego węzła lub między dowolnym dwa elementy równorzędne.Porównania właściwość jest zachowywana po dowolnej liczby węzłów jest wstawiony lub usunięty z hierarchii.Większość wstawienia i usunięcia zachować zgodnie ze stopniem zwięzłości właściwość.Jednakże wstawienia między dwoma węzłami da hierarchyid wartości z nieco mniej kompaktowe reprezentacji.
Kodowanie używane w hierarchyid typu jest ograniczona do 892 bajtów.W rezultacie węzły, które mają zbyt wiele poziomów ich reprezentacji dopasowanie się w bajtach 892 nie może być reprezentowana przez hierarchyid typu.
hierarchyid Typu są dostępne dla klientów CLR jako SqlHierarchyId typu danych.
Uwagi
hierarchyid Typu logicznie koduje informacje dotyczące pojedynczego węzła w drzewo hierarchii przez kodowanie ścieżka z katalogu głównego drzewa do węzła.Takie ścieżka logicznie jest reprezentowana jako sekwencji etykiet węzłów dzieci wszystkich odwiedzanych po katalogu głównego.Kreskę ułamkową uruchamia reprezentacji i tylko wizyty w katalogu głównym ścieżka jest reprezentowany przez pojedynczy ukośnik.Dla poziomów poniżej katalogu głównego każda etykieta jest kodowane jako sekwencja liczb całkowitych, oddzielone kropkami.Porównanie między dzieci jest przeprowadzana przez porównywanie sekwencje liczby całkowitej, oddzielone kropkami w kolejności słowników.Każdy poziom następuje kreską ułamkową.W związku z tym ukośnikiem oddziela rodziców od ich dzieci.Na przykład, obowiązują następujące hierarchyid ścieżki o długości 1, 2, 2, 3 i 3 poziomy, odpowiednio:
/
/1/
/0.3.-7/
/1/3/
/0.1/0.2/
Węzły można wstawić w dowolnym miejscu.Węzły dodaje się po /1/2/ lecz przed /1/3/ może być reprezentowana jako /1/2,5/.Węzły wstawione przed 0 jest logiczną reprezentacją jako liczbę ujemną.Na przykład węzeł, który znajduje się przed /1/1/ może być reprezentowana jako /1/1 /.Węzły nie może zawierać zera wiodące.Na przykład /1/1.1/ jest prawidłowa, ale /1/1.01/ jest nieprawidłowa.Aby zapobiec błędom, wstawianie węzły za pomocą GetDescendant metoda.
Konwersja typu danych
hierarchyid Typ danych można konwertować na inne typy danych w następujący sposób:
Użycie ToString() metoda konwersji hierarchyid wartość logiczna reprezentacja jako nvarchar(4000) typu danych.
Use Read () and Write () to convert hierarchyid to varbinary.
Konwersja z hierarchyid do pliku XML nie jest obsługiwany.Przesyłanie hierarchyid Parametry za pośrednictwem protokołu SOAP oddanych najpierw je jako ciągi znaków.Kwerendy z XML dla klauzula nie powiedzie się tabela z hierarchyid , chyba że kolumna jest pierwszym konwertowane na typ danych znak.
Uaktualnianie baz danych
Po uaktualnieniu bazy danych do SQL Server 2008, nowego wirtualny plik dziennika i hierarchyid typu danych zostanie automatycznie zainstalowana.Uaktualnienie wykrywać reguły klasyfikatora dowolnego typu użytkowników lub zespoły z konfliktu nazw.Doradca uaktualnienia doradzić, zmiana nazwy wszelkie powodujące konflikt wirtualny plik dziennikai zmiana nazwy niezgodnego typu, lub przy użyciu nazw dwóch części kodu do odwoływania się do tego typu użytkownik gotowe.
Jeśli uaktualnienie bazy danych wykryje użytkownika wirtualny plik dziennika o nazwie powodujące konflikt, będą automatycznie Zmień nazwę wirtualny plik dziennika i umieść bazę danych w trybie podejrzanych.
Jeśli istnieje typ użytkownika o nazwie konflikty podczas uaktualniania, specjalnych kroków nie są pobierane.Po uaktualnieniu stary typ użytkownika i nowy typ systemu, będzie istnieć.Typ użytkownika będą dostępne tylko przy użyciu nazwy dwóch części.
Przy użyciu hierarchyid kolumn w tabelach replikowane
Kolumny typu hierarchyid mogą być używane w dowolnej zreplikowanej tabela.Wymagania aplikacji są zależne od, czy replikacja jest jeden kierunkowe lub dwukierunkowego i w wersjach SQL Server służące.
Dwukierunkowa jednej replikacji
Dwukierunkowa jednej replikacja zawiera migawka replikacjatransakcyjnej replikacjai replikacja scalająca , w którym nie zostaną wprowadzone zmiany przez subskrybenta.Jak hierachyid kolumny działają na jednym kierunkowe replikacja zależy od wersja SQL Server subskrybenta jest uruchomiony.
A SQL Server 2008 Wydawca można replikować hierachyid kolumny do SQL Server 2008 subskrybenta bez żadnych specjalnych okoliczności.
A SQL Server 2008 Wydawca , należy przekonwertować hierarchyid kolumny do replikowania ich do subskrybenta z SQL Server Compact 3.5 z dodatkiem SP1 lub starszej wersja programu SQL Server.SQL Server Compact 3.5 z dodatkiem SP1i starszych wersjach SQL Server nie obsługują hierarchyid kolumny.Jeśli używasz jednego z tych wersji możliwość replikacji danych do subskrybenta.Aby to zrobić, musisz zestaw opcję schemat lub poziom zgodności publikacja (dla replikacja scalająca) tak, aby kolumna można konwertować na typ danych zgodny.Aby uzyskać więcej informacji, zobacz W topologii replikacji przy użyciu wielu wersji programu SQL Server.
Filtrowanie kolumn jest obsługiwany w obu tych scenariuszy.Obejmuje to filtrowanie hierarchyid kolumny.Filtrowanie wierszy jest obsługiwane tak długo, jak filtr nie obejmuje hierarchyid kolumna.
Komunikacja dwukierunkowa replikacji
Komunikacja dwukierunkowa replikacja zawiera replikacja transakcyjnej subskrypcje aktualizacji, peer-to-peer transakcyjnej replikacjai replikacja scalająca w których zmian przez subskrybenta.Replikacja umożliwia konfigurowanie tabela z hierarchyid kolumny dwukierunkowa replikacja.Uwaga następujące wymagania i uwagi.
Musi być uruchomiony Wydawca i wszystkim subskrybentom SQL Server 2008.
Replikacja replikuje dane jako bajtów i nie wykonuje żadnych sprawdzania poprawności, aby zapewnić integralność hierarchii.
Hierarchia zmiany wprowadzone w źródło (subskrybenta lub Wydawca) nie jest zachowywane, gdy mają być replikowane do obiekt docelowy.
Wartości mieszania dla hierarchyid kolumny są specyficzne dla bazy danych, w którym są generowane.Dlatego tę samą wartość zostanie wygenerowany na Wydawca i subskrybenta, ale mogą być zastosowane do różnych wierszy.Replikacja nie sprawdza ten warunek i nie ma możliwości wbudowanych do partycji hierarchyid kolumna wartości jak występuje w przypadku kolumn.Aplikacje muszą używać ograniczeń lub innych mechanizmów, aby uniknąć takich konfliktów niewykryte.
Jest to możliwe, że wiersze, które są wstawiane na subskrybenta zostaną porzucone.Wiersz nadrzędny wstawionego wiersza został usunięty przez Wydawca.wyniki niewykryte konflikt, gdy Wydawcadodaje się wiersz od subskrybenta.
Filtry kolumny nie można odfiltrować inne niż nullable hierarchyid kolumny: Wstawia od subskrybenta zakończy się niepowodzeniem, ponieważ nie ma żadnej wartości domyślnej dla hierarchyid kolumna w Wydawca.
Filtrowanie wierszy jest obsługiwane tak długo, jak filtr nie obejmuje hierarchyid kolumna.