Partilhar via


Referência do método de tipo de dados HierarchyID

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do Azurebanco de dados SQL no Microsoft Fabric

O hierarchyid tipo de dados é um comprimento variável, tipo de dados do sistema. Use hierarchyid para representar a posição em uma hierarquia. Uma coluna do tipo hierarchyid não representa automaticamente uma árvore. Cabe ao aplicativo gerar e atribuir hierarchyid valores de tal forma que a relação desejada entre linhas seja refletida nos valores.

Um valor do hierarchyid tipo de dados representa uma posição em uma hierarquia de árvore. Os valores para hierarchyid têm as seguintes propriedades:

  • Extremamente compacto
    O número médio de bits necessários para representar um nó em uma árvore com n nós depende da distribuição média (o número médio de filhos de um nó). Para pequenos fanouts (0-7), o tamanho é de cerca de 6*logAn bits, onde A é o fanout médio. Um nó em uma hierarquia organizacional de 100.000 pessoas com uma distribuição média de 6 níveis leva cerca de 38 bits. Isso é arredondado para 40 bits, ou 5 bytes, para armazenamento.
  • A comparação é de primeira ordem
    Dado dois valores de hierárquico um e b, um<b significa que a vem antes de b em uma travessia profunda da árvore. Os índices em tipos de dados hierarchyid estão em profundidade de primeira ordem, e nós próximos uns dos outros em uma travessia de profundidade primeiro são armazenados próximos uns dos outros. Por exemplo, os filhos de um registro são armazenados ao lado desse registro. Para obter mais informações, consulte dados hierárquicos (SQL Server).
  • Suporte para inserções e exclusões arbitrárias
    Usando o GetDescendant método, é sempre possível gerar um irmão à direita de qualquer nó dado, à esquerda de qualquer nó dado, ou entre quaisquer dois irmãos. A propriedade de comparação é mantida quando um número arbitrário de nós é inserido ou excluído da hierarquia. A maioria das inserções e exclusões preserva a propriedade de compacidade. No entanto, inserções entre dois nós produzirão valores hierarchyid com uma representação um pouco menos compacta.
  • A codificação usada no tipo hierarchyid é limitada a 892 bytes. Consequentemente, nós que têm muitos níveis em sua representação para caber em 892 bytes não podem ser representados pelo hierarchyid tipo.

O tipo de hierarchyid está disponível para clientes CLR como o SqlHierarchyId tipo de dados.

Comentários

O tipo de hierarchyid codifica logicamente informações sobre um único nó em uma árvore de hierarquia codificando o caminho da raiz da árvore para o nó. Tal caminho é logicamente representado como uma sequência de rótulos de nós de todas as crianças visitadas após a raiz. Uma barra inicia a representação, e um caminho que visita apenas a raiz é representado por uma única barra. Para níveis abaixo da raiz, cada rótulo é codificado como uma sequência de inteiros separados por pontos. A comparação entre crianças é realizada comparando as sequências inteiras separadas por pontos na ordem dos dicionários. Cada nível é seguido por uma barra. Portanto, uma barra separa os pais dos filhos. Por exemplo, os seguintes itens são válidos hierarchyid caminhos de comprimentos 1, 2, 2, 3 e 3 níveis, respectivamente:

  • /

  • /1/

  • /0.3.-7/

  • /1/3/

  • /0.1/0.2/

Os nós podem ser inseridos em qualquer local. Os nós inseridos após /1/2/ mas antes /1/3/ podem ser representados como /1/2.5/. Os nós inseridos antes de 0 têm a representação lógica como um número negativo. Por exemplo, um nó que vem antes de /1/1/ pode ser representado como /1/-1/. Os nós não podem ter zeros à esquerda. Por exemplo, /1/1.1/ é válido, mas /1/1.01/ não é válido. Para evitar erros, insira nós usando o GetDescendant método.

Conversão de tipo de dados

O hierarchyid tipo de dados pode ser convertido em outros tipos de dados da seguinte maneira:

  • Use o método ToString() para converter o valor de hierarchyid para a representação lógica como um tipo de dados nvarchar(4000).
  • Use Read () e Write () para converter hierarchyid em varbinary.
  • Para transmitir parâmetros de hierarchyid por meio de SOAP, primeiro os classifique como strings.

Atualizando bancos de dados

Quando um banco de dados é atualizado para uma versão mais recente do SQL Server, o novo assembly e o hierarchyid tipo de dados serão instalados automaticamente. As regras do supervisor de atualização detetam qualquer tipo de usuário ou assemblies com nomes conflitantes. O supervisor de atualização aconselhará a renomeação de qualquer assembly conflitante e a renomeação de qualquer tipo conflitante ou o uso de nomes de duas partes no código para fazer referência a esse tipo de usuário preexistente.

Se uma atualização de banco de dados detetar um assembly de usuário com nome conflitante, ele renomeará automaticamente esse assembly e colocará o banco de dados no modo suspeito.

Se existir um tipo de usuário com nome conflitante durante a atualização, nenhuma etapa especial será executada. Após a atualização, o tipo de usuário antigo e o novo tipo de sistema existirão. O tipo de usuário estará disponível apenas através de nomes de duas partes.

Usando colunas hierarchyid em tabelas replicadas

Colunas do tipo hierarchyid podem ser usadas em qualquer tabela replicada. Os requisitos para seu aplicativo dependem se a replicação é direcional ou bidirecional e das versões do SQL Server que são usadas.

Replicação unidirecional

A replicação unidirecional inclui replicação de snapshot, replicação transacional e replicação de mesclagem na qual as alterações não são feitas no Assinante. Como colunas de hierarchyid funcionam com uma replicação direcional depende da versão do SQL Server que o Assinante está executando.

  • Um Editor do SQL Server pode replicar colunas de hierarchyid para um Assinante do SQL Server da mesma versão sem considerações especiais.
  • Um Editor do SQL Server deve converter colunas de hierarchyid para replicá-las para um Assinante que esteja executando o SQL Server Compact ou uma versão anterior do SQL Server. O SQL Server Compact e versões anteriores do SQL Server não oferecem suporte a colunas de hierarchyid. Se você estiver usando uma dessas versões, ainda poderá replicar dados para um Assinante. Para fazer isso, você deve definir uma opção de esquema ou o nível de compatibilidade de publicação (para replicação de mesclagem) para que a coluna possa ser convertida em um tipo de dados compatível.

A filtragem de colunas é suportada em ambos os cenários. Isso inclui filtrar hierarchyid colunas. A filtragem de linha é suportada desde que o filtro não inclua uma coluna hierarchyid .

Replicação bidirecional

A replicação bidirecional inclui replicação transacional com atualização de assinaturas, replicação transacional ponto a ponto e replicação de mesclagem na qual as alterações são feitas no Assinante. A replicação permite configurar uma tabela com hierarchyid colunas para replicação bidirecional. Observe os seguintes requisitos e considerações.

  • O Editor e todos os Assinantes devem estar executando a mesma versão do SQL Server 2016 (13.x) ou posterior.
  • A replicação replica os dados como bytes e não executa nenhuma validação para garantir a integridade da hierarquia.
  • A hierarquia das alterações feitas na origem (Assinante ou Editor) não é mantida quando elas são replicadas para o destino.
  • Os valores de hash para colunas de hierarchyid são específicos do banco de dados no qual são gerados. Portanto, o mesmo valor pode ser gerado no Editor e no Assinante, mas pode ser aplicado a linhas diferentes. A replicação não verifica essa condição e não há uma maneira interna de particionar valores de coluna de hierarchyid como existe para colunas IDENTITY. Os aplicativos devem usar restrições ou outros mecanismos para evitar esses conflitos não detetados.
  • É possível que as linhas inseridas no Subscritor fiquem órfãs. A linha pai da linha inserida pode ter sido excluída no Editor. Isso resulta em um conflito não detetado quando a linha do Assinante é inserida no Editor.
  • Os filtros de coluna não podem filtrar colunas hierarchyid não anuláveis: as inserções do Assinante falharão porque não há nenhum valor padrão para a coluna hierarchyid no Editor.
  • A filtragem de linha é suportada desde que o filtro não inclua uma coluna hierarchyid .

Ver também

dados hierárquicos (SQL Server)
de referência do método de tipo de dados hierarchyid