http://www.cnblogs.com/keepfool/archive/2012/02/05/2338700.html
CREATE function F_ContactAllParentPlaceByClassID
(
@classID varchar(15) --参数
)
returns varchar(500)
as
begin
declare @ParentClassID varchar(15) --变量父ID
declare @Place varchar(500) --变量Place
set @Place = ''
--首先根据传入的ClassID获取其父ID,ParentClassID
SELECT @ParentClassID = pid FROM aaa
where id = @classID
/*到此,我们得到 其父ID 例如 C18 我们可以得到 C12 但问题还没有完,
C12本身也还有父节点,即C2。我们还需要将C2取出,C2的父节点为000即为根节点。
至此结束。
因此,由此问题可以看出,这是一个递归过程,根据指定ClassID获取其父ID。再
根据父ID继续获取父ID的父ID,一直递归,直至父ID为000为止!
因此下面实现SQL函数的递归 ,注意看
*/
if (@ParentClassID <> '0')--如果不是根节点
begin
-- 再将@ParentClassID父ID作为ClassID传入 进行自调用
set @Place = dbo.F_ContactAllParentPlaceByClassID(@ParentClassID) +'_' +@ParentClassID
end
return @Place
END
(
@classID varchar(15) --参数
)
returns varchar(500)
as
begin
declare @ParentClassID varchar(15) --变量父ID
declare @Place varchar(500) --变量Place
set @Place = ''
--首先根据传入的ClassID获取其父ID,ParentClassID
SELECT @ParentClassID = pid FROM aaa
where id = @classID
/*到此,我们得到 其父ID 例如 C18 我们可以得到 C12 但问题还没有完,
C12本身也还有父节点,即C2。我们还需要将C2取出,C2的父节点为000即为根节点。
至此结束。
因此,由此问题可以看出,这是一个递归过程,根据指定ClassID获取其父ID。再
根据父ID继续获取父ID的父ID,一直递归,直至父ID为000为止!
因此下面实现SQL函数的递归 ,注意看
*/
if (@ParentClassID <> '0')--如果不是根节点
begin
-- 再将@ParentClassID父ID作为ClassID传入 进行自调用
set @Place = dbo.F_ContactAllParentPlaceByClassID(@ParentClassID) +'_' +@ParentClassID
end
return @Place
END
浙公网安备 33010602011771号