我有这样的代码
create function factfind(@num integer)
returns integer
as
begin
if (@num=1) then
return 1;
else
return(@num*factfind(@num-1));
end if;
end
Run Code Online (Sandbox Code Playgroud)
错误是,Msg 156,Level 15,State 1,Procedure factfind,Line 5在关键字'then'附近的语法错误.Msg 156,Level 15,State 1,Procedure factfind,Line 7关键字'else'附近的语法不正确.Msg 195,Level 15,State 10,Procedure factfind,第8行'factfind'不是公认的内置函数名.
请帮帮我的朋友.
...
begin
return ( CASE
WHEN @num=1 THEN 1
ELSE @num * dbo.factfind(@num-1)
END
);
end
Run Code Online (Sandbox Code Playgroud)
编辑:需要是dbo.factfind因为标量udfs必须是模式限定的
执行这个:
\n\nCREATE FUNCTION dbo.fakult\xc3\xa4t(@n DECIMAL(38,0))\nRETURNS DECIMAL(38,0)\nAS\nBEGIN\nDECLARE @tmp DECIMAL(38,0)\n IF (@n <= 1)\n SELECT @tmp = 1\n ELSE\n SELECT @tmp = @n * dbo.fakult\xc3\xa4t(@n - 1)\n RETURN @tmp\nEND\nRun Code Online (Sandbox Code Playgroud)\n\n或者:
\n\nCREATE FUNCTION dbo.Factorial ( @iNumber int )\nRETURNS INT\nAS\nBEGIN\nDECLARE @i int\n\n IF @iNumber <= 1\n SET @i = 1\n ELSE\n SET @i = @iNumber * dbo.Factorial( @iNumber - 1 )\nRETURN (@i)\nEND\nRun Code Online (Sandbox Code Playgroud)\n