Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
Azure SQL Database
Instancia
administrada de Azure SQLBase de datos SQL en Microsoft Fabric
El tipo de datos hierarchyid es un tipo de datos del sistema de longitud variable. Use hierarchyid para representar la posición en una jerarquía. Una columna de tipo hierarchyid no representa automáticamente un árbol. Es necesario que la aplicación genere y asigne valores hierarchyid de forma que la relación deseada entre filas se refleje en los valores.
Un valor del tipo de datos hierarchyid representa una posición en una jerarquía de árbol. Los valores de hierarchyid tienen las siguientes propiedades.
Extremadamente compacto: el número medio de bits necesarios para representar un nodo en un árbol con n nodos depende del promedio de distribución ramificada (el número medio de elementos secundarios de un nodo). Para los ventiladores pequeños (0-7), el tamaño es de aproximadamente 6 * logA n bits, donde A es el promedio de distribución ramificada. Un nodo de una jerarquía organizativa de 100 000 personas con un fanout promedio de seis niveles toma unos 38 bits. Esto se redondea a 40 bits (o 5 bytes) para el almacenamiento.
La comparación está en primer orden: dados dos valores
ayb,a<bsignifica que un viene antes de b en un recorrido detallado del árbol. Los índices de los tipos de datos hierarchyid están en orden con prioridad a la profundidad y los nodos cercanos entre sí en un corte transversal de prioridad a la profundidad se almacenan casi uno junto a otro. Por ejemplo, los elementos secundarios de un registro se almacenan adyacentes a ese registro. Para obtener más información, vea Datos jerárquicos (SQL Server).Compatibilidad con inserciones y eliminaciones arbitrarias: mediante el método GetDescendant , siempre es posible generar un elemento relacionado a la derecha de cualquier nodo determinado, a la izquierda de cualquier nodo determinado o entre dos elementos del mismo nivel. Se mantiene la propiedad comparison cuando se inserta o elimina un número arbitrario de nodos de la jerarquía. La mayoría de las inserciones y eliminaciones conservan la propiedad compactness. Sin embargo, las inserciones entre dos nodos generan valores hierarchyid con una representación ligeramente menos compacta.
La codificación está limitada a 892 bytes: Por lo tanto, los nodos que tienen demasiados niveles en su representación para ajustarse a 892 bytes no se pueden representar mediante el tipo hierarchyid .
El tipo hierarchyid está disponible para los clientes de Common Language Runtime (CLR) como tipo SqlHierarchyId de datos.
Remarks
El tipo hierarchyid codifica lógicamente la información de un nodo único en un árbol de jerarquía mediante la codificación de la ruta de acceso desde la raíz del árbol hasta el nodo. Este tipo de ruta de acceso se representa lógicamente como una secuencia de etiquetas de nodo de todos los elementos secundarios visitados después de la raíz. Una barra diagonal inicia la representación y una barra diagonal única representa una ruta de acceso que solo visita la raíz. Para los niveles por debajo de la raíz, cada etiqueta se codifica como una secuencia de enteros separados por puntos.
La comparación entre los elementos secundarios se realiza comparando las secuencias de enteros separados por puntos en orden alfabético. Una barra diagonal termina cada nivel. Por consiguiente, una barra diagonal separa los elementos primarios de los secundarios. Por ejemplo, estas son rutas de acceso de hierarchyid válidas con longitudes 1, 2, 2, 3 y 3 niveles, respectivamente:
//1//0.3.-7//1/3//0.1/0.2/
Pueden insertarse los nodos en cualquier ubicación. Nodos insertados después /1/2/ de pero antes /1/3/ de que se puedan representar como /1/2.5/. Los nodos insertados antes de 0 tener la representación lógica como un número negativo. Por ejemplo, un nodo que viene antes /1/1/ se puede representar como /1/-1/. Los nodos no pueden tener ceros iniciales. Por ejemplo, /1/1.1/ es válido, pero /1/1.01/ no es válido. Para evitar errores, inserte los nodos mediante el método GetDescendant.
Conversión de tipos de datos
El tipo de datos hierarchyid puede convertirse a otros tipos de datos de la siguiente manera:
Use el método ToString para convertir el valor hierarchyid en la representación lógica como un tipo de datos nvarchar(4000).
Use Read (Motor de base de datos) mediante CSharp y Write para convertir hierarchyid en varbinary.
Para transmitir parámetros hierarchyid a través de SOAP, primero los convierte como cadenas.
Actualización de bases de datos
Cuando se actualiza una base de datos a una versión más reciente de SQL Server, el nuevo ensamblado y el tipo de datos hierarchyid se instalan automáticamente. Las reglas de asesor de actualizaciones detectan tipos de usuario o ensamblados con nombres problemáticos. El asesor de actualizaciones aconseja cambiar el nombre de cualquier ensamblado en conflicto y cambiar el nombre de cualquier tipo en conflicto o usar nombres de dos partes en el código para hacer referencia a ese tipo de usuario preexistente.
Si una actualización de base de datos detecta un ensamblado de usuario con un nombre en conflicto, cambia automáticamente el nombre de ese ensamblado y coloca la base de datos en modo sospechoso.
Si durante la actualización se encuentra un tipo de usuario con un nombre problemático, no se llevará a cabo ningún procedimiento especial. Después de la actualización, existen tanto el tipo de usuario antiguo como el nuevo tipo de sistema. El tipo de usuario solo está disponible a través de nombres de dos partes.
Uso de columnas hierarchyid en tablas replicadas
Las columnas de tipo hierarchyid pueden usarse en cualquier tipo de tabla replicada. Los requisitos para su aplicación dependen de si la replicación es unidireccional o bidireccional, y de las versiones de SQL Server usadas.
Replicación unidireccional
La replicación unidireccional incluye la replicación de instantáneas, la replicación transaccional y la replicación de mezcla en la que no se realizan cambios en el suscriptor. El funcionamiento de las columnas hierarchyid con la replicación unidireccional depende de la versión de SQL Server que el suscriptor ejecute.
Un publicador de SQL Server puede replicar las columnas hierarchyid en un suscriptor de la misma versión de SQL Server sin ninguna consideración especial.
Un publicador de SQL Server debe convertir columnas hierarchyid para replicarlas en un suscriptor que ejecuta SQL Server Compact o una versión anterior de SQL Server. SQL Server Compact y versiones anteriores de SQL Server no admiten columnas hierarchyid . Si usa una de estas versiones, todavía puede replicar datos en un suscriptor. Para ello, debe establecer una opción de esquema o el nivel de compatibilidad de la publicación (para la replicación de mezcla) de modo que la columna se pueda convertir en un tipo de datos compatible.
Se admite el filtrado de columnas en ambos escenarios. Esto incluye el filtrado de las columnas hierarchyid. El filtrado de filas se admite siempre que el filtro no incluya una columna hierarchyid .
Replicación bidireccional
La replicación bidireccional incluye la replicación transaccional con suscripciones de actualización, replicación transaccional del mismo nivel y replicación de mezcla en la que se realizan los cambios en el suscriptor. Con la replicación se puede configurar una tabla con columnas hierarchyid para replicación bidireccional. Tenga en cuenta los siguientes requisitos y consideraciones.
El publicador y todos los suscriptores deben ejecutar la misma versión, en SQL Server 2016 (13.x) o una versión posterior.
La replicación replica los datos como bytes y no realiza ninguna validación para garantizar la integridad de la jerarquía.
La jerarquía de los cambios realizados en el origen (suscriptor o publicador) no se mantiene cuando se replican en el destino.
Los valores de las columnas hierarchyid pueden tener representaciones binarias idénticas en todas las bases de datos. Los conflictos pueden producirse en la replicación bidireccional cuando la lógica de la aplicación genera de forma independiente el mismo hierarchyid para diferentes entidades. Por consiguiente, se pudo generar el mismo valor en el publicador y suscriptor, pero se pudo aplicar a filas diferentes. La replicación no comprueba esta condición y no hay ninguna manera integrada de crear particiones de los valores de columna hierarchyid , ya que hay para
IDENTITYlas columnas. Las aplicaciones deben usar restricciones u otros mecanismos para evitar estos conflictos sin detectar.Es posible que las filas insertadas en el suscriptor se puedan huérfanas. Es posible que la fila primaria de la fila insertada se elimine en el publicador. Esto producirá un conflicto sin detectar cuando la fila del suscriptor se inserte en el publicador.
Los filtros de columna no pueden filtrar columnas hierarchyid que no aceptan valores NULL. Se produce un error en las inserciones del suscriptor porque no hay ningún valor predeterminado para la columna hierarchyid en el publicador.
El filtrado de filas se admite siempre que el filtro no incluya una columna hierarchyid .