如何在SQL SERVER中进行递归?

stephe 2003-05-13 03:27:28
编写存储过程中,如何进行函数的递归,也就是说如何自己递用自己.
...全文
116 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
leimin 2003-05-13
  • 打赏
  • 举报
回复
PLS SEE :
http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=70519
shien 2003-05-13
  • 打赏
  • 举报
回复
初步想了一下,比较粗燥,
可以尝试设2个堆栈,1个符号栈,1个运算数据栈
while 符号栈@levelN>0
begin
读字符,分别插入不同的栈中
同一运算级别设置相同的@levelN,
插入一级levelN++
读入')'后,可以将这个级别的计算数取出计算,然后从堆栈中删除,levelN--

end
stephe 2003-05-13
  • 打赏
  • 举报
回复
我的想法是在一个字段中存放着某一个计算公式,将它读出后进行分析,找出里面的参于运算的其它字段的值,这时就要考虑括号,加,减,除等问题。我想先找出最内层的左括号和右括号,然后,判断符号进行运算。这时就会有许多左,右括号进行判断,写成递归不是很好吗?
可是问题又出来了,这个递归如何写才好。谢谢指点。在线等。。。。。。
shien 2003-05-13
  • 打赏
  • 举报
回复
不知道你具体的要求,
在SQL Server中实现某些递归功能,可能需要建立1个临时表当作堆栈使用

/*初始化堆栈*/
Create Table #stack (item varchar(10),levleN int,pre varchar(10))
Insert into #stack values(@iTargetID,1,'0')
/*levleN 表示的是层数,递归的级数*/
while @levleN > 0
begin
if exists (select * from #stack where levleN = @levleN)
begin
.........................
---删除堆栈中已处理完的数据
delete from #stack where levleN = @levleN and item = @current

insert #stack ('',@levleN + 1,'') --给堆栈压入新的一级数据

select @levleN = @levleN + 1

end--if
else
set @levleN = @levleN - 1
end--while

maquansheng 2003-05-13
  • 打赏
  • 举报
回复
create proc aaa
as
declare @a
//sql statments
exec @a=aaa
go
joygxd 2003-05-13
  • 打赏
  • 举报
回复
在函数里在调用函数就成了递归

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧