我有以下存储过程来返回工作正常的 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 循环并定义了一个 Table 变量可以正常工作,但我只是想知道有没有更好的方法从表中检索层次结构数据?
上面代码的问题是可维护性。如果我需要返回 NiceUrls 表的 1 列,那么我必须定义一个新变量,将该列添加到内联表等。
有没有更好的方法来重写sp?
谢谢,
是什么