主题:关于sql server中函数递归的请教
关于sql server中函数递归的请教
我现在有一个表,如下:
(id) (名字) (上一级id)
Org_Id Org_Name Org_Parentid
……
我想建一个函数把每一条记录的最上级名字列出来。
我写的函数如下:
CREATE FUNCTION dbo.GetParentOrgan
(@i AS decimal)
RETURNS VARCHAR(40) AS
BEGIN
declare @j decimal,@Org VARCHAR(40)
SELECT @j=Org_Parentid,@Org=Org_Name FROM Organ WHERE Org_Id = @i
IF( @j in (92001,91001,120391,120996,120521,121148,121618,91002))/*这是最上级的ID*/
RETURN @Org
RETURN dbo.GetParentOrgan((select Org_Parentid from Organ WHERE Org_Id = @i))
END
运行出错提示如下:
服务器: 消息 217,级别 16,状态 1,过程 GetParentOrgan,行 10
超出了存储过程、函数、触发器或视图的最大嵌套层数(最大层数为 32)。
估计是哪里格式不对导致死循环,由于以前从来没在sqlserver写过递归,请各位高手多多指教!谢谢!
我现在有一个表,如下:
(id) (名字) (上一级id)
Org_Id Org_Name Org_Parentid
……
我想建一个函数把每一条记录的最上级名字列出来。
我写的函数如下:
CREATE FUNCTION dbo.GetParentOrgan
(@i AS decimal)
RETURNS VARCHAR(40) AS
BEGIN
declare @j decimal,@Org VARCHAR(40)
SELECT @j=Org_Parentid,@Org=Org_Name FROM Organ WHERE Org_Id = @i
IF( @j in (92001,91001,120391,120996,120521,121148,121618,91002))/*这是最上级的ID*/
RETURN @Org
RETURN dbo.GetParentOrgan((select Org_Parentid from Organ WHERE Org_Id = @i))
END
运行出错提示如下:
服务器: 消息 217,级别 16,状态 1,过程 GetParentOrgan,行 10
超出了存储过程、函数、触发器或视图的最大嵌套层数(最大层数为 32)。
估计是哪里格式不对导致死循环,由于以前从来没在sqlserver写过递归,请各位高手多多指教!谢谢!