我在接受采访时被要求创建一个函数来计算一个数字的阶乘,递归地调用它。
我尝试这样做会导致错误消息:
" Msg 217,Level 16,State 1,Line 1最大存储过程, 超出功能,触发器或视图嵌套级别(限制32)。"
以下是查询:
CREATE FUNCTION fnGetFactorial ( @num INT )
RETURNS INT
AS
BEGIN
DECLARE @result INT
, @n INT
WHILE ( @num <> 1 )
BEGIN
SELECT @n = dbo.fnGetFactorial(@num)
SELECT @result = @num * @n
SET @num = @num - 1
END
RETURN @result
END
那么,是否有可能以与我上面的代码类似的方式进行,只需要很少的修改?我不想使用CTE。
答案 0 :(得分:4)
ALTER FUNCTION dbo.fnGetFactorial (@num int)
RETURNS INT
AS
BEGIN
DECLARE @n int
IF @num <= 1 SET @n = 1
ELSE SET @n = @num * dbo.fnGetFactorial(@num - 1)
RETURN @n
END
GO