我有一个名为 tblmodules 的表,它有 3 列:moduleid、name、parent_id。parent_id 列采用其他模块的值。前任:
Moduleid Name Parentid
-------- ----- --------
1 grandparent Null
2 parent 1
3 child 2
我想要一个存储过程,它采用父母的 ID 和孩子的姓名给出一个级别。所以我开发了以下内容。
@moduleid bigint,
@level int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
declare @parentid bigint
declare @name nvarchar(100)
set @parentid = (select parentid from tblModules where ModuleId = @moduleid)
declare @counter int
set @counter = 1
while @counter < @level
begin
set @parentid = (select parentid from tblModules where ModuleId = @parentid)
set @name = (select Name from tblModules where ModuleId = @parentid)
set @counter = @counter + 1
end
select @parentid AS ID
select @name as Name
end
该过程运行良好,并获得了正确的父级 ID,但名称与子级保持相同。例如,我正在执行它,给出值@moduleid:3 和@level:2。我得到的结果 ID:1 是正确的,但名称:孩子而不是祖父母。有什么帮助吗?