代码之家  ›  专栏  ›  技术社区  ›  Jason Coon

如何使用递归函数更新表?

  •  0
  • Jason Coon  · 技术社区  · 14 年前

    this question

    函数不允许写入数据库,但是如果每次调用函数(特别是递归函数)时都要更新记录呢?

    • 创建递归函数,使其将表作为参数
    • 如果表为空,则创建它;否则,将表复制到新变量(因为它将是只读的)
    • 在进行递归调用之前,更新函数中复制的表,并将副本传递给函数
    • 最后,返回完整的表(不确定如何“知道”它是否完整)

    在我尝试这样的事情之前,我正在寻找替代品。似乎这是以前做过的。

    1 回复  |  直到 7 年前
        1
  •  6
  •   Remus Rusanu    14 年前

    任何递归实现都是T-SQL迟早会运行到 @@NESTLEVEL cap

    您可以嵌套存储过程和 托管代码引用最多32个 水平。嵌套级别增加 或托管代码引用开始 被调用的存储过程或托管过程 筑巢的层次会导致整个 呼叫链失败。

    但是我们从CS101知道,任何递归算法都可以在堆栈的帮助下实现为迭代算法。因此需要一个表作为堆栈(请参见 Using Tables as Queues

    所有这些都只是理论,因为你没有提供实际问题,只是对问题类型的描述。如果我们知道真正的问题,我们可能会说一个存储过程是否有意义,使用游标是否可以,使用临时表是否可行等等,所有这些都只是为了考虑普通的香草算法。事情会变得更糟 真正地 如果您添加数据大小的考虑因素和并发性问题,就会出现问题。