У меня есть простая самореферентная таблица в памяти
CREATE TABLE [Accounts]
(
Id UNIQUEIDENTIFIER NOT NULL,
[ParentAccount_Id] UNIQUEIDENTIFIER NULL,
CONSTRAINT [PK_Accounts] PRIMARY KEY NONCLUSTERED ([Id])
)
WITH
(
MEMORY_OPTIMIZED = ON,
DURABILITY = SCHEMA_AND_DATA
);
Я изо всех сил пытаюсь найти элегантный способ пересечь иерархию, представленную таблицей, т.е. с учетом учетной записи. Мне нужно выбратьСписок его предков.
Обычно, когда не используются нативно скомпилированные sprocs, я бы использовал тип данных CTE или HIERARCHYID.Однако ни один из них не поддерживается для нативно скомпилированных sprocs.
Итак, мои вопросы: какой метод я могу использовать, чтобы пройти эту иерархию, которая совместима с нативно скомпилированными хранимыми процедурами?
Примеры данных иожидаемые результаты:
|Id |ParentAccounts_Id |
|---------------------------------------|--------------------------------------|
|00000000-0000-0000-0000-000000000006 |00000000-0000-0000-0000-000000000002 |
|00000000-0000-0000-0000-000000000005 |00000000-0000-0000-0000-000000000002 |
|00000000-0000-0000-0000-000000000004 |00000000-0000-0000-0000-000000000001 |
|00000000-0000-0000-0000-000000000003 |00000000-0000-0000-0000-000000000001 |
|00000000-0000-0000-0000-000000000002 |00000000-0000-0000-0000-000000000001 |
|00000000-0000-0000-0000-000000000001 |NULL |
Если исходный идентификатор равен 00000000-0000-0000-0000-000000000006, я ожидаю увидеть следующий результат
00000000-0000-0000-0000-000000000006
00000000-0000-0000-0000-000000000002
00000000-0000-0000-0000-000000000001