我有以下存储过程,可以返回Id、parentId和absoluteUrls列表,它可以正常工作:
ALTER PROCEDURE [dbo].[SearchDataManager.HierarchyById]
@currentId AS int
AS
BEGIN
DECLARE @id INT
DECLARE @parentId INT
DECLARE @absoluteUrl NVARCHAR(1000)
DECLARE @Hierarchy TABLE (Id int, ParentId int, AbsoluteUrl nvarchar(1000))
WHILE @currentId != 0
BEGIN
SELECT @id = Id, @parentId = ParentId, @absoluteUrl = AbsoluteUrl
FROM dbo.[SearchDataManager.NiceUrls]
WHERE id = @currentId
INSERT INTO @Hierarchy VALUES (@id, @parentId, @absoluteUrl)
SET @currentId = @parentId
END
SELECT * FROM @Hierarchy
END
"NiceUrls"表包含Id和ParentId字段。ParentId指向同一表中的一个记录。
返回结果如下:
----------------------------------
Id | ParentId | AbsoluteUrl
----------------------------------
294 | 5 | url1
5 | 2 | url2
2 | 0 | url3
以上代码使用WHILE循环和定义表变量的方式可以正常工作,但我想知道是否有更好的方法从表中检索层次数据?
上述代码的问题在于可维护性。如果我需要返回NiceUrls表的另外一列,那么我必须定义一个新变量,将该列添加到内联表中等等。
是否有更好的方法重写存储过程?
谢谢。
什么是?