Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 从felloe递归成员中排除作用域的表_Sql Server_Tsql - Fatal编程技术网

Sql server 从felloe递归成员中排除作用域的表

Sql server 从felloe递归成员中排除作用域的表,sql-server,tsql,Sql Server,Tsql,我有一个递归的标量函数(在某些情况下调用自身)。是否有任何类型的表可以确保递归树中运行的函数的每个实例不会影响其余的实例 我已经读到#表有会话作用域,@表有批处理作用域,但是所有实例都在同一会话和批处理中…对吗 下面是一个简单的例子: CREATE FUNCTION dbo.Factorial ( @iNumber int ) RETURNS INT AS BEGIN -- I want to declare a table here which is independent for each

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

我已经读到#表有会话作用域,@表有批处理作用域,但是所有实例都在同一会话和批处理中…对吗

下面是一个简单的例子:

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
创建函数dbo.Factorial(@iNumber int)
返回整数
作为
开始
--我想在这里声明一个表,它对于每个递归阶段都是独立的
声明@i int

如果@iNumber您可以使用表变量:

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
创建函数dbo.Factorial(@iNumber int)
返回整数
作为
开始
声明@i int;
将@tab声明为表(i INT);--在这里

如果@iNumber正在搜索循环检测?请以当前形式发布您的代码,这个问题很模糊。不…………好的,我添加了一个示例如果您在函数体中声明一个表变量,该变量是该函数实例的私有变量,不与其他并发调用共享。既然不使用它,那么声明
@tab
的目的是什么?@Sami这是一个例子。Op没有说明他想要实现什么。