浏览 7382 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-06-20
CREATE FUNCTION weightValue(@idValue int) RETURNS bigint AS BEGIN DECLARE @return bigint DECLARE @fatherID int DECLARE @number int DECLARE @menuPath VARCHAR(50) DECLARE @treeLevel int DECLARE @weightLevel bigint SET @return = 0 SET @weightLevel = 1 SELECT @fatherID=fatherID,@menuPath=menuPath,@number=number FROM treeTable WHERE id=@idValue SELECT @treeLevel=len(@menuPath)-len(replace(@menuPath,'/','')) WHILE(@treeLevel<9) --此处9为目录层次数,经测试bigInt可以支持9级目录,再多目录层次就会出现益出 BEGIN SET @weightLevel=@weightLevel*100 SET @treeLevel=@treeLevel+1 END SET @return=@number*@weightLevel IF(@fatherID = 1) BEGIN RETURN(@return) END RETURN ([dbo].weightValue(@fatherID)+@return) END 当id大于32时候为什么会报这个错 服务器: 消息 217,级别 16,状态 1,过程 weightValue,行 28 超出了存储过程、函数、触发器或视图的最大嵌套层数(最大层数为 32)。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-06-20
你这是递归调用,每次递归都会多一次嵌套调用,
当递归次数太多时,就会超过最大嵌套层数. 其实没必要用递归调用方式的,普通循环就可以实现了. |
|
返回顶楼 | |