moduleid、name、parent_idの3つの列を持つtblmodulesというテーブルがあります。列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を取得していますが、これは正しいですが、名前:祖父母ではなく子です。何か助けはありますか?