我有下面的存储过程返回的正常工作标识,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”表中有编号和的ParentId。 的parentId是指在同一个表中的记录。
它返回这样的:
----------------------------------
Id | ParentId | AbsoluteUrl
----------------------------------
294 | 5 | url1
5 | 2 | url2
2 | 0 | url3
上面的代码工作正常使用while循环,并定义了一个表变量,但我只是想知道有没有什么更好的方法来从表中检索分层数据?
与上述代码的问题是可维护性。 如果我需要返回NiceUrls表1列以上,那么我必须定义一个新的变量,列添加到内联表等。
有没有更好的方式来改写藻?
谢谢,
什么是