在 SQL Server 2005 中导航分层数据
从 SQL Server 2005 检索分层数据可能具有挑战性,尤其是在处理自引用时表,其中子记录指向其父母的 ID。虽然视图和复杂查询很常见,但它们通常缺乏优雅和效率。
一种解决方案利用公共表表达式 (CTE) 来构建层次结构并为每个项目生成路径。此方法涉及创建一个名为 Parent 的 CTE,该 CTE 首先选择根节点(ParentID 为 NULL)及其名称作为路径。然后,它递归地添加子节点,将它们的名称连接到父路径。
以下代码演示了这种方法:
CREATE TABLE tblHierarchy (ID int, ParentID int NULL, Name varchar(128)); INSERT INTO tblHierarchy VALUES (1, NULL, '1'); INSERT INTO tblHierarchy VALUES (2, NULL, '2'); INSERT INTO tblHierarchy VALUES (3, NULL, '3'); INSERT INTO tblHierarchy VALUES (4, 1, '1.1'); INSERT INTO tblHierarchy VALUES (5, 1, '1.2'); INSERT INTO tblHierarchy VALUES (6, 4, '1.1.1'); WITH Parent AS ( SELECT ID, ParentID, Name AS Path FROM tblHierarchy WHERE ParentID IS NULL UNION ALL SELECT TH.ID, TH.ParentID, CONVERT(varchar(128), Parent.Path + '/' + TH.Name) AS Path FROM tblHierarchy TH INNER JOIN Parent ON Parent.ID = TH.ParentID ) SELECT * FROM Parent
此 CTE 创建一个带有附加列 Path 的分层表,其中包含到每个节点的完整路径。生成的查询输出将是:
ID ParentID Path 1 NULL 1 2 NULL 2 3 NULL 3 4 1 1/1.1 5 1 1/1.2 6 4 1/1.1/1.1.1
此方法提供了一种干净、高效的方法来从 SQL Server 2005 中的自引用表检索分层数据。它消除了复杂的手动查询的需要,并允许更轻松地导航层次结构。
以上是如何从 SQL Server 2005 中的自引用表中高效地检索分层数据?的详细内容。更多信息请关注PHP中文网其他相关文章!