首页 > 解决方案 > 范围排除在外递归成员之外的表

问题描述

我有一个递归的标量函数(在某些情况下调用自身)。是否有任何类型的表可以确保在递归树中运行的函数的每个实例不会影响其余的?

我读过#tables 具有会话范围,@tables 具有批处理范围,但是所有实例都在同一个会话和批处理中......对吗?

这是一个简单的例子:

CREATE FUNCTION dbo.Factorial ( @iNumber int )
RETURNS INT
AS
BEGIN
-- I want to declare a table here which is independent for each recursion stage
DECLARE @i  int

    IF @iNumber <= 1
        SET @i = 1
    ELSE
        SET @i = @iNumber * dbo.Factorial( @iNumber - 1 )
RETURN (@i)
END

标签: sql-servertsql

解决方案


您可以使用表变量:

CREATE FUNCTION dbo.Factorial ( @iNumber int )
RETURNS INT
AS
BEGIN

  DECLARE @i  int;
  DECLARE @tab AS TABLE(i INT);  -- here

    IF @iNumber <= 1
      SET @i = 1
    ELSE
        SET @i = @iNumber * dbo.Factorial( @iNumber - 1 )
RETURN (@i)
END

推荐阅读