我有一个简单的自引用内存表
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
);
我正在努力寻找一种优雅的方式来遍历由表表示的层次结构,即给定一个 Account.Id 我需要获取它的祖先列表。
通常,当不使用本地编译的存储过程时,我会使用 CTE 或 HIERARCHYID 数据类型。但是,本机编译的存储过程都不支持这些。
所以我的问题是,我可以使用什么技术来遍历与本机编译的存储过程兼容的这种层次结构?
样本数据和预期结果:
|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 |
鉴于初始 ID 是 00000000-0000-0000-0000-000000000006 我希望看到以下结果
00000000-0000-0000-0000-000000000006
00000000-0000-0000-0000-000000000002
00000000-0000-0000-0000-000000000001