hierarchyid 데이터 형식 메서드 참조hierarchyid data type method reference

이 항목은 다음에 적용됩니다.예SQL Server(2008부터)예Azure SQL Database아니요Azure SQL Data Warehouse 아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

hierarchyid 데이터 형식은 가변 길이의 시스템 데이터 형식입니다.The hierarchyid data type is a variable length, system data type. hierarchyid는 계층에서의 위치를 나타내는 데 사용됩니다.Use hierarchyid to represent position in a hierarchy. hierarchyid 형식의 열은 자동으로 트리를 나타내지 않습니다.A column of type hierarchyid does not automatically represent a tree. 응용 프로그램에 따라 원하는 행 간 관계가 값에 반영되도록 hierarchyid 값이 생성되어 할당됩니다.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.

hierarchyid 데이터 형식의 값은 트리 계층에서의 위치를 나타냅니다.A value of the hierarchyid data type represents a position in a tree hierarchy. hierarchyid 값의 속성은 다음과 같습니다.Values for hierarchyid have the following properties:

  • 높은 압축성Extremely compact
    n 개 노드가 포함된 트리에서 노드를 나타내는 데 필요한 평균 비트 수는 평균 fanout(노드의 평균 자식 수)에 따라 달라집니다.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). 작은 fanout(0-7)의 경우 크기는 약 6*logAn 비트입니다. 여기서 A는 평균 fanout입니다.For small fanouts (0-7), the size is about 6*logAn bits, where A is the average fanout. 평균 fanout 수준이 6인 100,000명으로 구성된 조직 계층의 노드는 약 38비트를 사용합니다.A node in an organizational hierarchy of 100,000 people with an average fanout of 6 levels takes about 38 bits. 이는 저장을 위해 40비트나 5바이트로 반올림됩니다.This is rounded up to 40 bits, or 5 bytes, for storage.
  • 깊이 우선 순서로 비교Comparison is in depth-first order
    두 개의 hierarchyid 값이 ab인 경우 a<b는 깊이 우선 트리 탐색에서 a가 b 앞에 온다는 의미입니다.Given two hierarchyid values a and b, a<b means a comes before b in a depth-first traversal of the tree. hierarchyid 데이터 형식의 인덱스에는 깊이 우선 순서가 사용되며 깊이 우선 탐색에서 서로 가까이 있는 노드는 서로 가깝게 저장됩니다.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. 예를 들어 레코드의 자식은 해당 레코드에 인접하게 저장됩니다.For example, the children of a record are stored adjacent to that record. 자세한 내용은 계층적 데이터(SQL Server)를 참조하세요.For more information, see Hierarchical Data (SQL Server).
  • 임의 삽입 및 삭제 지원Support for arbitrary insertions and deletions
    GetDescendant 메서드를 사용하면 지정한 노드의 오른쪽, 지정한 노드의 왼쪽 또는 두 형제 사이에 형제를 생성할 수 있습니다.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. 임의 개수의 노드를 계층에서 삽입하거나 삭제할 때 비교 속성이 유지됩니다.The comparison property is maintained when an arbitrary number of nodes is inserted or deleted from the hierarchy. 대부분의 삽입 및 삭제 시 압축성 속성이 유지됩니다.Most insertions and deletions preserve the compactness property. 그러나 두 노드 간 삽입 시에는 약간 덜 압축된 표현으로 hierarchyid 값이 생성됩니다.However, insertions between two nodes will produce hierarchyid values with a slightly less compact representation.
  • hierarchyid 형식에 사용되는 인코딩은 892바이트로 제한됩니다.The encoding used in the hierarchyid type is limited to 892 bytes. 따라서 표현에 수준이 너무 많아 892바이트에 들어가지 못하는 노드는 hierarchyid 형식으로 나타낼 수 없습니다.Consequently, nodes which have too many levels in their representation to fit into 892 bytes cannot be represented by the hierarchyid type.

hierarchyid 형식은 CLR 클라이언트에서 SqlHierarchyId 데이터 형식으로 사용할 수 있습니다.The hierarchyid type is available to CLR clients as the SqlHierarchyId data type.

RemarksRemarks

hierarchyid 형식은 트리의 루트에서 노드까지의 경로를 인코딩하는 방법으로 계층 트리의 단일 노드에 대한 정보를 논리적으로 인코딩합니다.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. 이러한 경로는 루트 이후 거친 모든 자식의 노드 레이블 시퀀스로 논리적으로 표현됩니다.Such a path is logically represented as a sequence of node labels of all children visited after the root. 표현은 슬래시로 시작하며 루트만 거친 경로는 단일 슬래시로 표시됩니다.A slash starts the representation, and a path that only visits the root is represented by a single slash. 루트 아래 수준의 경우 각 레이블은 마침표로 분리된 정수 시퀀스로 인코딩됩니다.For levels underneath the root, each label is encoded as a sequence of integers separated by dots. 자식 간의 비교는 마침표로 분리된 정수 시퀀스를 사전 순서로 비교하여 수행됩니다.Comparison between children is performed by comparing the integer sequences separated by dots in dictionary order. 각 수준 다음에는 슬래시가 사용됩니다.Each level is followed by a slash. 즉, 슬래시가 부모와 자식을 분리합니다.Therefore a slash separates parents from their children. 예를 들어 다음은 길이가 각각 1, 2, 2, 3 및 3 수준인 유효한 hierarchyid 경로입니다.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/

노드는 어느 위치에나 삽입할 수 있습니다.Nodes can be inserted in any location. /1/2//1/3/ 사이에 삽입한 노드는 /1/2.5/ 로 나타낼 수 있습니다.Nodes inserted after /1/2/ but before /1/3/ can be represented as /1/2.5/. 0 앞에 삽입된 노드의 논리 표현은 음수입니다.Nodes inserted before 0 have the logical representation as a negative number. 예를 들어 /1/1/ 앞에 오는 노드는 /1/-1/ 로 나타낼 수 있습니다.For example, a node that comes before /1/1/ can be represented as /1/-1/. 노드에는 앞에 오는 0이 포함될 수 없습니다.Nodes cannot have leading zeros. 예를 들어 /1/1.1/ 은 유효하지만 /1/1.01/ 은 유효하지 않습니다.For example, /1/1.1/ is valid, but /1/1.01/ is not valid. 오류가 발생하지 않도록 하려면 GetDescendant 메서드를 사용하여 노드를 삽입합니다.To prevent errors, insert nodes by using the GetDescendant method.

데이터 형식 변환Data type conversion

hierarchyid 데이터 형식은 다음과 같이 다른 데이터 형식으로 변환할 수 있습니다.The hierarchyid data type can be converted to other data types as follows:

  • ToString() 메서드를 사용하여 hierarchyid 값을 nvarchar(4000) 데이터 형식의 논리 표현으로 변환할 수 있습니다.Use the ToString() method to convert the hierarchyid value to the logical representation as a nvarchar(4000) data type.
  • hierarchyidvarbinary로 변환하려면 Read ()Write ()를 사용합니다.Use Read () and Write () to convert hierarchyid to varbinary.
  • SOAP를 통해 hierarchyid 매개 변수를 전송하려면 먼저 문자열로 캐스팅해야 합니다.To transmit hierarchyid parameters through SOAP first cast them as strings.

데이터베이스 업그레이드Upgrading databases

데이터베이스를 SQL Server 2017SQL Server 2017로 업그레이드하면 새로운 어셈블리와 hierarchyid 데이터 형식이 자동으로 설치됩니다.When a database is upgraded to SQL Server 2017SQL Server 2017, the new assembly and the hierarchyid data type will automatically be installed. 업그레이드 관리자 규칙에서는 이름이 충돌하는 사용자 형식이나 어셈블리를 검색합니다.Upgrade advisor rules detect any user type or assemblies with conflicting names. 업그레이드 관리자는 충돌하는 어셈블리의 이름을 변경할 것을 알려 주며, 충돌하는 형식의 이름을 변경하거나 코드에서 기존 사용자 형식을 참조할 수 있도록 두 부분으로 된 이름을 사용할 것을 알려 줍니다.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.

데이터베이스 업그레이드에서 이름이 충돌하는 사용자 어셈블리가 발견되면 해당 어셈블리의 이름이 자동으로 변경되고 데이터베이스가 주의 대상 모드로 설정됩니다.If a database upgrade detects a user assembly with conflicting name, it will automatically rename that assembly and put the database into suspect mode.

업그레이드 중에 이름이 충돌하는 사용자 형식이 발견된 경우에는 특별한 조치가 취해지지 않습니다.If a user type with conflicting name exists during the upgrade, no special steps are taken. 업그레이드 후에는 기존 사용자 형식과 새 시스템 형식이 모두 존재하게 됩니다.After the upgrade, both the old user type, and the new system type, will exist. 사용자 형식은 두 부분으로 된 이름을 통해서만 사용할 수 있습니다.The user type will be available only through two-part names.

복제된 테이블에서 hierarchyid 열 사용Using hierarchyid columns in replicated tables

hierarchyid 형식의 열은 복제된 모든 테이블에서 사용할 수 있습니다.Columns of type hierarchyid can be used on any replicated table. 응용 프로그램의 요구 사항은 복제가 단방향인지 양방향인지, 사용된 SQL ServerSQL Server 버전이 무엇인지에 따라 달라집니다.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.

단방향 복제One-directional replication

단방향 복제에는 변경 내용이 구독자에 적용되지 않는 병합 복제 및 스냅숏 복제, 트랜잭션 복제가 포함됩니다.One-directional replication includes snapshot replication, transactional replication, and merge replication in which changes are not made at the Subscriber. hierachyid 열이 단방향 복제에서 어떻게 작동하는지는 구독자가 실행 중인 SQL ServerSQL Server 버전에 따라 달라집니다.How hierachyid columns work with one directional replication depends on the version of SQL ServerSQL Server the Subscriber is running.

  • SQL Server 2017SQL Server 2017 게시자는 특별히 고려할 사항 없이 hierachyid 열을 SQL Server 2017SQL Server 2017 구독자에 복제할 수 있습니다.A SQL Server 2017SQL Server 2017 Publisher can replicate hierachyid columns to a SQL Server 2017SQL Server 2017 Subscriber without any special considerations.
  • SQL Server CompactSQL Server Compact 또는 이전 버전의 SQL ServerSQL Server를 실행하고 있는 구독자에게 hierarchyid 열을 복제하려면 SQL Server 2017SQL Server 2017 게시자는 이러한 열을 변환해야 합니다.A SQL Server 2017SQL Server 2017 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 및 이전 버전의 SQL ServerSQL Server에서는 hierarchyid 열이 지원되지 않습니다. and earlier versions of SQL ServerSQL Server do not support hierarchyid columns. 이러한 버전 중 하나를 사용 중인 경우에도 데이터를 구독자로 복제할 수 있습니다.If you are using one of these versions, you can still replicate data to a Subscriber. 이렇게 하려면 열을 호환되는 데이터 형식으로 변환할 수 있도록 스키마 옵션이나 게시 호환성 수준(병합 복제의 경우)을 설정해야 합니다.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.

열 필터링은 이러한 두 가지 시나리오에서 모두 지원됩니다.Column filtering is supported in both of these scenarios. 여기에는 hierarchyid 열 필터링도 포함됩니다.This includes filtering out hierarchyid columns. 행 필터링은 필터에 hierarchyid 열이 포함되어 있지 않은 경우에 한해 지원됩니다.Row filtering is supported as long as the filter does not include a hierarchyid column.

양방향 복제Bi-directional replication

양방향 복제에는 변경 내용이 구독자에 적용되는 병합 복제와 구독이 업데이트되는 트랜잭션 복제, 피어 투 피어 트랜잭션 복제가 포함됩니다.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. hierarchyid 열이 있는 테이블을 양방향 복제에 맞게 구성할 수 있습니다.Replication lets you configure a table with hierarchyid columns for bi-directional replication. 다음 요구 사항 및 고려 사항을 유의하세요.Note the following requirements and considerations.

  • 게시자와 모든 구독자는 SQL Server 2017SQL Server 2017을 실행해야 합니다.The Publisher and all Subscribers must be running SQL Server 2017SQL Server 2017.
  • 복제 기능은 데이터를 바이트로 복제하며 계층의 무결성을 보장하기 위한 유효성 검사는 수행하지 않습니다.Replication replicates the data as bytes and does not perform any validation to assure the integrity of the hierarchy.
  • 원본(구독자 또는 게시자)에 수행된 변경의 계층은 대상에 복제될 때 유지되지 않습니다.The hierarchy of the changes that were made at the source (Subscriber or Publisher) is not maintained when they replicate to the destination.
  • hierarchyid 열의 해시 값은 해당 값이 생성된 데이터베이스에 한정됩니다.The hash values for hierarchyid columns are specific to the database in which they are generated. 따라서 게시자와 구독자에 동일한 값이 생성되더라도 서로 다른 행에 적용될 수 있습니다.Therefore, the same value could be generated on the Publisher and Subscriber, but it could be applied to different rows. 복제 기능은 이러한 상황을 확인하지 않으며 IDENTITY 열과 같이 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. 응용 프로그램에서는 제약 조건 또는 기타 메커니즘을 사용하여 이러한 감지되지 않는 충돌을 피해야 합니다.Applications must use constraints or other mechanisms to avoid such undetected conflicts.
  • 구독자에 삽입한 행이 분리되는 경우가 발생할 수 있습니다.It is possible that rows that are inserted on the Subscriber will be orphaned. 이는 삽입된 행의 부모가 게시자에서 삭제되었기 때문일 수 있습니다.The parent row of the inserted row might have been deleted at the Publisher. 이렇게 되면 구독자의 행이 게시자에 삽입될 때 감지되지 않은 충돌이 발생합니다.This results in an undetected conflict when the row from the Subscriber is inserted at the Publisher.
  • 열 필터는 Null을 허용하지 않는 hierarchyid 열을 필터링할 수 없습니다. 게시자의 hierarchyid 열에 대한 기본값이 없기 때문에 구독자에서의 삽입은 실패합니다.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.
  • 행 필터링은 필터에 hierarchyid 열이 포함되어 있지 않은 경우에 한해 지원됩니다.Row filtering is supported as long as the filter does not include a hierarchyid column.

관련 항목:See also

계층적 데이터(SQL Server)Hierarchical Data (SQL Server)
hierarchyid 데이터 형식 메서드 참조hierarchyid Data Type Method Reference