Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base 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 valores hierarchyid 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 * logA n bits, onde A é o fanout médio. Um nó em uma hierarquia organizacional de 100.000 pessoas com uma distribuição média de seis níveis leva cerca de 38 bits. Isso é arredondado para 40 bits, ou 5 bytes, para armazenamento.
A comparação é em profundidade de primeira ordem: Dado dois valores
aeb,a<bsignifica que a vem antes de b em uma travessia de profundidade primeira 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 método GetDescendant , é sempre possível gerar um irmão à direita de qualquer nó, à esquerda de qualquer nó ou entre 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 produzem valores hierarchyid com uma representação um pouco menos compacta.
A codificação é limitada a 892 bytes: Portanto, os nós que têm muitos níveis em sua representação para caber em 892 bytes não podem ser representados pelo tipo hierarchyid .
O tipo hierarchyid está disponível para clientes CLR (Common Language Runtime) como o tipo de SqlHierarchyId dados.
Remarks
O tipo de hierarchyid
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 depois, /1/2/ mas antes /1/3/ , podem ser representados como /1/2.5/. Os nós inseridos antes 0 têm a representação lógica como um número negativo. Por exemplo, um nó que vem antes /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 hierarchyid para a representação lógica como um tipo de dados nvarchar(4000).
Use Read (Mecanismo de Banco de Dados) usando CSharp e Write para converter hierarchyid em varbinary.
Para transmitir parâmetros hierarchyid através de SOAP, primeiro converta-os como strings.
Atualizar bancos de dados
Quando um banco de dados é atualizado para uma versão mais recente do SQL Server, o novo assembly e o tipo de dados hierarchyid sã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 aconselha renomear qualquer assembly conflitante e renomear qualquer tipo conflitante ou usar 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, existem o tipo de usuário antigo e o novo tipo de sistema. O tipo de usuário está disponível apenas por meio de nomes de duas partes.
Usar 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 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 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 linhas é 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, no SQL Server 2016 (13.x) ou em uma versão 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 para colunas hierarchyid podem ter representações binárias idênticas em todos os bancos de dados. Os conflitos podem ocorrer na replicação bidirecional quando a lógica do aplicativo gera independentemente o mesmo hierarchyid para entidades diferentes. 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 hierarchyid como há para
IDENTITYcolunas. Os aplicativos devem usar restrições ou outros mecanismos para evitar esses conflitos não detetados.É possível que as linhas inseridas no Assinante fiquem órfãs. A linha pai da linha inserida pode ser 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 falham porque não há nenhum valor padrão para a coluna hierarchyid no Publicador.
A filtragem de linhas é suportada desde que o filtro não inclua uma coluna hierarchyid .