sql-server - 范围排除在外递归成员之外的表
问题描述
我有一个递归的标量函数(在某些情况下调用自身)。是否有任何类型的表可以确保在递归树中运行的函数的每个实例不会影响其余的?
我读过#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
解决方案
您可以使用表变量:
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
推荐阅读
- javascript - Vue.JS“类型错误:reverseMessage 不是函数”
- python - 如何将异常发送到 django 项目的哨兵
- oracle11g - 防止oracle中的记录重复
- java - 可调用的 Guice DI
- python - actix Actor 如何拥有 PyO3 Python?
- c++ - 我可以从第三个线程监控 boost::lockfree::spsc_queue 吗?
- css - angular-gridster2 网格大小
- c# - Azure Durable 编排功能触发两次
- r - 使用 for 循环创建包含其他列中值计数的列
- html - 如何从 div 中减去形状?