Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Возвращает идентификатор hierarchyid, представляющий n-го предка элемента this.
Применимо для следующих объектов: SQL Server (SQL Server 2008 по текущую версию), База данных SQL Windows Azure (С первоначального выпуска по текущий выпуск). |
Синтаксис
-- 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)