Jas*_*oon 0 sql sql-server recursion user-defined-functions
这是这个问题的后续行动.
函数不允许写入数据库,但如果我想在每次调用函数时更新记录,特别是递归函数,该怎么办?
目前,我有一个函数,它接受一个ID并返回一个浮点数.我想使用给定的ID和返回的float更新表.通常,可以使用简单的存储过程来调用该函数,然后进行更新.我的函数是递归的,所以解决方案并不那么简单......
我正在考虑尝试这样做:
在我尝试这样的事情之前,我正在寻找替代方案.似乎以前已经完成了这项工作.
任何递归实现都是T-SQL迟早会遇到@@NESTLEVEL上限:
您可以将存储过程和托管代码引用嵌套最多32个级别.当被调用的存储过程或托管代码引用开始执行时,嵌套级别增加1,当被调用的存储过程或托管代码引用完成执行时,嵌套级别减1.尝试超过最多32个嵌套级别会导致整个调用链失败.
但是我们从CS101知道,任何递归算法都可以在堆栈的帮助下实现为迭代算法.因此,您需要一个表来充当堆栈(有关相关讨论,请参阅将表用作队列).使用存储过程而不是函数,因为在T-SQL中"函数"是特殊的(基本上是数据访问路径)并且不允许修改数据.每当你想到'function'(如在C/C++/C#函数或方法中)时,你真的需要一个存储过程.您不能从过程返回'tables',因此输出必须是您在其中写入结果的表.
所有这些只是理论,因为你没有提供实际问题,只是对问题类型的描述.如果我们知道真正的问题,我们可能会说存储过程是否有意义,是否使用游标是否正常,是否使用#temp表等等等等.所有这些只是考虑普通的香草算法.如果添加数据大小考虑因素和并发问题,事情会变得非常繁琐.
| 归档时间: |
|
| 查看次数: |
1017 次 |
| 最近记录: |