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


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

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

Синтаксис

-- 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)