Referencia de los métodos del tipo de datos hierarchyidhierarchyid data type method reference

SE APLICA A: síSQL Server síAzure SQL Database noAzure Synapse Analytics (SQL DW) noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

El tipo de datos hierarchyid es un tipo de datos del sistema de longitud variable.The hierarchyid data type is a variable length, system data type. Use hierarchyid para representar la posición en una jerarquía.Use hierarchyid to represent position in a hierarchy. Una columna de tipo hierarchyid no representa automáticamente un árbol.A column of type hierarchyid does not automatically represent a tree. Dependerá de la aplicación generar y asignar los valores hierarchyid de tal forma que la relación deseada entre las filas se refleje en los valores.It is up to the application to generate and assign hierarchyid values in such a way that the desired relationship between rows is reflected in the values.

Un valor del tipo de datos hierarchyid representa una posición en una jerarquía de árbol.A value of the hierarchyid data type represents a position in a tree hierarchy. Los valores de hierarchyid tienen las siguientes propiedades.Values for hierarchyid have the following properties:

  • Muy compactosExtremely compact
    El número medio de bits necesarios para representar un nodo en un árbol con n nodos depende del promedio de distribución ramificada secundarios (el promedio de elementos secundarios de un nodo).The average number of bits that are required to represent a node in a tree with n nodes depends on the average fanout (the average number of children of a node). Para distribuciones ramificadas pequeñas (0-7), el tamaño es aproximadamente 6*logAn bits, donde A es el promedio de distribución ramificada.For small fanouts (0-7), the size is about 6*logAn bits, where A is the average fanout. Un nodo en una jerarquía organizativa de 100.000 personas con un promedio de nodos secundarios de 6 niveles supone aproximadamente 38 bits.A node in an organizational hierarchy of 100,000 people with an average fanout of 6 levels takes about 38 bits. Esto se redondea a 40 bits (o 5 bytes) para el almacenamiento.This is rounded up to 40 bits, or 5 bytes, for storage.
  • La comparación se realiza con prioridad a la profundidadComparison is in depth-first order
    Dados dos valores hierarchyid a y b, a<b significa que a viene antes que b en un corte transversal de prioridad a la profundidad del árbol.Given two hierarchyid values a and b, a<b means a comes before b in a depth-first traversal of the tree. 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.Indexes on hierarchyid data types are in depth-first order, and nodes close to each other in a depth-first traversal are stored near each other. Por ejemplo, los elementos secundarios de un registro se almacenan adyacentes a ese registro.For example, the children of a record are stored adjacent to that record. Para más información, vea Datos jerárquicos (SQL Server).For more information, see Hierarchical Data (SQL Server).
  • Compatibilidad con inserciones y eliminaciones arbitrariasSupport for arbitrary insertions and deletions
    Con el método GetDescendant siempre es posible generar un miembro del mismo nivel a la derecha de cualquier nodo determinado, a la izquierda de cualquier nodo determinado, o entre dos miembros cualesquiera del mismo nivel.By using the GetDescendant method, it is always possible to generate a sibling to the right of any given node, to the left of any given node, or between any two siblings. Se mantiene la propiedad comparison cuando se inserta o elimina un número arbitrario de nodos de la jerarquía.The comparison property is maintained when an arbitrary number of nodes is inserted or deleted from the hierarchy. La mayoría de las inserciones y eliminaciones conservan la propiedad compactness.Most insertions and deletions preserve the compactness property. Sin embargo, las inserciones entre dos nodos generarán valores hierarchyid con una representación ligeramente menos compacta.However, insertions between two nodes will produce hierarchyid values with a slightly less compact representation.
  • La codificación usada en el tipo hierarchyid está limitada a 892 bytes.The encoding used in the hierarchyid type is limited to 892 bytes. Por consiguiente, el tipo hierarchyid no podrá representar los nodos con demasiados niveles en su representación como para caber en los 892 bytes.Consequently, nodes which have too many levels in their representation to fit into 892 bytes cannot be represented by the hierarchyid type.

El tipo hierarchyid está disponible para clientes CLR como el tipo de datos SqlHierarchyId.The hierarchyid type is available to CLR clients as the SqlHierarchyId data type.

NotasRemarks

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.The hierarchyid type logically encodes information about a single node in a hierarchy tree by encoding the path from the root of the tree to the node. 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.Such a path is logically represented as a sequence of node labels of all children visited after the root. Una barra diagonal inicia la representación y una barra diagonal única representa una ruta de acceso que solo visita la raíz.A slash starts the representation, and a path that only visits the root is represented by a single slash. Para los niveles por debajo de la raíz, cada etiqueta se codifica como una secuencia de enteros separados por puntos.For levels underneath the root, each label is encoded as a sequence of integers separated by dots. La comparación entre los elementos secundarios se realiza comparando las secuencias de enteros separados por puntos en orden alfabético.Comparison between children is performed by comparing the integer sequences separated by dots in dictionary order. Una barra diagonal termina cada nivel.Each level is followed by a slash. Por consiguiente, una barra diagonal separa los elementos primarios de los secundarios.Therefore a slash separates parents from their children. Por ejemplo, estas son rutas de acceso de hierarchyid válidas con longitudes 1, 2, 2, 3 y 3 niveles, respectivamente:For example, the following are valid hierarchyid paths of lengths 1, 2, 2, 3, and 3 levels respectively:

  • /

  • /1//1/

  • /0.3.-7//0.3.-7/

  • /1/3//1/3/

  • /0.1/0.2//0.1/0.2/

Pueden insertarse los nodos en cualquier ubicación.Nodes can be inserted in any location. Los nodos insertados después de /1/2/ pero antes de /1/3/ pueden representarse como /1/2.5/ .Nodes inserted after /1/2/ but before /1/3/ can be represented as /1/2.5/. Los nodos insertados antes de 0 tienen la representación lógica de un número negativo.Nodes inserted before 0 have the logical representation as a negative number. Por ejemplo, un nodo que viene antes de /1/1/ puede representarse como /1/-1/ .For example, a node that comes before /1/1/ can be represented as /1/-1/. Los nodos no pueden tener ceros a la izquierda.Nodes cannot have leading zeros. Por ejemplo, /1/1.1/ es válido, pero /1/1.01/ no lo es.For example, /1/1.1/ is valid, but /1/1.01/ is not valid. Para evitar errores, inserte los nodos mediante el método GetDescendant.To prevent errors, insert nodes by using the GetDescendant method.

Conversión de tipo de datosData type conversion

El tipo de datos hierarchyid puede convertirse a otros tipos de datos de la siguiente manera:The hierarchyid data type can be converted to other data types as follows:

  • Use el método ToString() para convertir el valor hierarchyid a la representación lógica como un tipo de datos nvarchar(4000) .Use the ToString() method to convert the hierarchyid value to the logical representation as a nvarchar(4000) data type.
  • Use Read () y Write () para convertir hierarchyid en varbinary.Use Read () and Write () to convert hierarchyid to varbinary.
  • Para transmitir los parámetros de hierarchyid a través de SOAP, conviértalos previamente a cadenas.To transmit hierarchyid parameters through SOAP first cast them as strings.

Actualizar bases de datosUpgrading databases

Cuando se actualiza una base de datos a SQL ServerSQL Server, se instalan automáticamente el nuevo ensamblado y el tipo de datos hierarchyid.When a database is upgraded to SQL ServerSQL Server, the new assembly and the hierarchyid data type will automatically be installed. Las reglas de asesor de actualizaciones detectan tipos de usuario o ensamblados con nombres problemáticos.Upgrade advisor rules detect any user type or assemblies with conflicting names. El asesor de actualizaciones aconsejará el cambio de nombre de los ensamblados problemáticos, y el cambio de nombre de los tipos problemáticos o la utilización de nombres de dos partes en el código para hacer referencia al tipo de usuario preexistente.The upgrade advisor will advise renaming of any conflicting assembly, and either renaming any conflicting type, or using two-part names in the code to refer to that preexisting user type.

Si una actualización de la base de datos detecta un ensamblado del usuario con un nombre problemático, cambiará automáticamente el nombre del ensamblado y colocará la base de datos en modo sospechoso.If a database upgrade detects a user assembly with conflicting name, it will automatically rename that assembly and put the database into suspect mode.

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.If a user type with conflicting name exists during the upgrade, no special steps are taken. Después de la actualización, existirán tanto el tipo de usuario anterior como el nuevo tipo de sistema.After the upgrade, both the old user type, and the new system type, will exist. El tipo de usuario solo estará disponible a través de nombres de dos partes.The user type will be available only through two-part names.

Usar columnas hierarchyid en tablas replicadasUsing hierarchyid columns in replicated tables

Las columnas de tipo hierarchyid pueden usarse en cualquier tipo de tabla replicada.Columns of type hierarchyid can be used on any replicated table. Los requisitos para su aplicación dependen de si la replicación es unidireccional o bidireccional, y de las versiones de SQL ServerSQL Server usadas.The requirements for your application depend on whether replication is one directional or bidirectional, and on the versions of SQL ServerSQL Server that are used.

Replicación unidireccionalOne-directional replication

La replicación unidireccional incluye la replicación de instantáneas, replicación transaccional y replicación de mezcla en las que las modificaciones no se realizan en el suscriptor.One-directional replication includes snapshot replication, transactional replication, and merge replication in which changes are not made at the Subscriber. El funcionamiento de las columnas hierarchyid con la replicación unidireccional depende de la versión de SQL ServerSQL Server que el suscriptor ejecute.How hierarchyid columns work with one directional replication depends on the version of SQL ServerSQL Server the Subscriber is running.

  • Un publicador de SQL ServerSQL Server puede replicar las columnas hierarchyid en un suscriptor de SQL ServerSQL Server sin ninguna consideración especial.A SQL ServerSQL Server Publisher can replicate hierarchyid columns to a SQL ServerSQL Server Subscriber without any special considerations.
  • Un publicador de SQL ServerSQL Server debe convertir las columnas hierarchyid para replicarlas a un suscriptor que esté ejecutando SQL Server CompactSQL Server Compact o una versión anterior de SQL ServerSQL Server.A SQL ServerSQL Server Publisher must convert hierarchyid columns to replicate them to a Subscriber that is running SQL Server CompactSQL Server Compact or an earlier version of SQL ServerSQL Server. SQL Server CompactSQL Server Compact y las versiones anteriores de SQL ServerSQL Server no admiten columnas hierarchyid.and earlier versions of SQL ServerSQL Server do not support hierarchyid columns. Si está usando una de estas versiones, todavía puede replicar los datos a un suscriptor.If you are using one of these versions, you can still replicate data to a Subscriber. 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.To do this, you must set a schema option or the publication compatibility level (for merge replication) so the column can be converted to a compatible data type.

Se admite el filtrado de columnas en ambos escenarios.Column filtering is supported in both of these scenarios. Esto incluye el filtrado de las columnas hierarchyid.This includes filtering out hierarchyid columns. Se admite el filtrado de filas con tal de que el filtro no incluya una columna hierarchyid.Row filtering is supported as long as the filter does not include a hierarchyid column.

Replicación bidireccionalBi-directional replication

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.Bi-directional replication includes transactional replication with updating subscriptions, peer-to-peer transactional replication, and merge replication in which changes are made at the Subscriber. Con la replicación se puede configurar una tabla con columnas hierarchyid para replicación bidireccional.Replication lets you configure a table with hierarchyid columns for bi-directional replication. Tenga en cuenta los siguientes requisitos y consideraciones.Note the following requirements and considerations.

  • El publicador y todos los suscriptores deben ejecutar SQL ServerSQL Server.The Publisher and all Subscribers must be running SQL ServerSQL Server.
  • La replicación replica los datos como bytes y no realiza ninguna validación para garantizar la integridad de la jerarquía.Replication replicates the data as bytes and does not perform any validation to assure the integrity of the hierarchy.
  • No se mantiene la jerarquía de las modificaciones realizadas en el origen (suscriptor o publicador) cuando se replican en el destino.The hierarchy of the changes that were made at the source (Subscriber or Publisher) is not maintained when they replicate to the destination.
  • Los valores hash de las columnas hierarchyid son específicos de la base de datos en la que se generan.The hash values for hierarchyid columns are specific to the database in which they are generated. Por consiguiente, se pudo generar el mismo valor en el publicador y suscriptor, pero se pudo aplicar a filas diferentes.Therefore, the same value could be generated on the Publisher and Subscriber, but it could be applied to different rows. La replicación no comprueba esta condición y, a diferencia de las columnas IDENTITY, no hay ningún medio integrado de particionar los valores de la columna hierarchyid.Replication does not check for this condition, and there is no built-in way to partition hierarchyid column values as there is for IDENTITY columns. Las aplicaciones deben usar restricciones u otros mecanismos para evitar estos conflictos sin detectar.Applications must use constraints or other mechanisms to avoid such undetected conflicts.
  • Es posible que las filas insertadas en el suscriptor sean huérfanas.It is possible that rows that are inserted on the Subscriber will be orphaned. Es posible que la fila primaria de la fila insertada se haya eliminado en el publicador.The parent row of the inserted row might have been deleted at the Publisher. Esto producirá un conflicto sin detectar cuando la fila del suscriptor se inserte en el publicador.This results in an undetected conflict when the row from the Subscriber is inserted at the Publisher.
  • Los filtros de columnas no pueden filtrar las columnas hierarchyid que no admiten valores NULL: la operación de inserción desde el suscriptor generará un error porque no hay ningún valor predeterminado de la columna hierarchyid en el publicador.Column filters cannot filter out non-nullable hierarchyid columns: inserts from the Subscriber will fail because there is no default value for the hierarchyid column on the Publisher.
  • Se admite el filtrado de filas con tal de que el filtro no incluya una columna hierarchyid.Row filtering is supported as long as the filter does not include a hierarchyid column.

Vea tambiénSee also

Datos jerárquicos (SQL Server)Hierarchical Data (SQL Server)
Referencia de los métodos del tipo de datos hierarchyidhierarchyid Data Type Method Reference