在sql函数中使用if语句

anv*_*sha 6 sql-server

我有这样的代码

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'不是公认的内置函数名.

请帮帮我的朋友.

gbn*_*gbn 7

...
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必须是模式限定的


aho*_*hoo 5

执行这个:

\n\n
CREATE 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\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者:

\n\n
CREATE 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\n
Run Code Online (Sandbox Code Playgroud)\n