Поделиться через


GetAncestor (компонент Database Engine)

Возвращает идентификатор hierarchyid, представляющий n-го предка элемента this.

Синтаксис

-- Transact-SQL syntax
child.GetAncestor ( n ) 

-- CLR syntax
SqlHierarchyId GetAncestor ( int n )

Аргументы

  • n
    Значение типа int, представляющее число уровней для перемещения вверх по иерархии.

Типы возвращаемых данных

Возвращаемый тип данных SQL Server: hierarchyid

Возвращаемый тип данных CLR: SqlHierarchyId

Замечания

Используется, чтобы проверить, является ли текущий узел предком для каждого из узлов в выходных данных на указанном уровне.

Если функции передается число больше значения GetLevel(), возвращается значение NULL.

При передаче отрицательного числа возникает исключение.

Примеры

А.Нахождение дочерних узлов родительского узла

Функция GetAncestor(1) возвращает имена сотрудников, для которых элемент david0 является непосредственным предком (родительским элементом). В следующем примере используется функция GetAncestor(1).

DECLARE @CurrentEmployee hierarchyid
SELECT @CurrentEmployee = OrgNode FROM HumanResources.EmployeeDemo
WHERE LoginID = 'adventure-works\david0'

SELECT OrgNode.ToString() AS Text_OrgNode, *
FROM HumanResources.EmployeeDemo
WHERE OrgNode.GetAncestor(1) = @CurrentEmployee ;

Б.Возвращение внучатых узлов родительского узла

Функция GetAncestor(2) возвращает имена сотрудников, расположенные двумя уровнями ниже текущего узла в иерархии. Эти элементы являются внучатыми для текущего узла. В следующем примере используется функция GetAncestor(2).

DECLARE @CurrentEmployee hierarchyid
SELECT @CurrentEmployee = OrgNode FROM HumanResources.EmployeeDemo
WHERE LoginID = 'adventure-works\ken0'

SELECT OrgNode.ToString() AS Text_OrgNode, *
FROM HumanResources.EmployeeDemo
WHERE OrgNode.GetAncestor(2) = @CurrentEmployee ;

В.Возвращение текущей строки

Чтобы вернуть текущий узел с помощью функции GetAncestor(0), выполните следующий код.

DECLARE @CurrentEmployee hierarchyid
SELECT @CurrentEmployee = OrgNode FROM HumanResources.EmployeeDemo
WHERE LoginID = 'adventure-works\david0'

SELECT OrgNode.ToString() AS Text_OrgNode, *
FROM HumanResources.EmployeeDemo
WHERE OrgNode.GetAncestor(0) = @CurrentEmployee ;

Г.Возвращение уровня иерархии в случае отсутствия таблицы

Функция GetAncestor возвращает выбранный уровень в иерархии даже в случае отсутствия таблицы. Например, следующим фрагментом кода назначается текущий сотрудник и возвращается идентификатор hierarchyid предка текущего сотрудника без обращения к таблице.

DECLARE @CurrentEmployee hierarchyid ;
DECLARE @TargetEmployee hierarchyid ;
SELECT @CurrentEmployee = '/2/3/1.2/5/3/' ;
SELECT @TargetEmployee = @CurrentEmployee.GetAncestor(2) ;
SELECT @TargetEmployee.ToString(), @TargetEmployee ;

Д.Вызов метода CLR

В следующем фрагменте кода вызывается метод GetAncestor().

this.GetAncestor(1)

См. также

Справочник

IsDescendantOf (компонент Database Engine)

hierarchyid (Transact-SQL)

Основные понятия

Справочник по методам типа данных hierarchyid

Иерархические данные (SQL Server)