我有这样的代码
create function factfind(@num integer)
returns integer
as
begin
if (@num=1) then
return 1;
else
return(@num*factfind(@num-1));
end if;
end
错误是, 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,Line 8 'factfind'不是公认的内置函数名称。
请帮帮我朋友。
答案 0 :(得分:7)
...
begin
return ( CASE
WHEN @num=1 THEN 1
ELSE @num * dbo.factfind(@num-1)
END
);
end
编辑:需要为dbo.factfind
,因为标量udfs必须是模式限定的
答案 1 :(得分:2)
你遇到的问题部分是TSQL中if语句的语法,正确的做法是:
create function factfind(@num integer)
returns integer
as
begin
declare @Result int
set @Result = 1
if (@num>1)
set @Result = @num * dbo.factfind(@num-1);
return @Result
end
答案 2 :(得分:1)
执行此操作:
CREATE FUNCTION dbo.fakultät(@n DECIMAL(38,0))
RETURNS DECIMAL(38,0)
AS
BEGIN
DECLARE @tmp DECIMAL(38,0)
IF (@n <= 1)
SELECT @tmp = 1
ELSE
SELECT @tmp = @n * dbo.fakultät(@n - 1)
RETURN @tmp
END
或:
CREATE FUNCTION dbo.Factorial ( @iNumber int )
RETURNS INT
AS
BEGIN
DECLARE @i int
IF @iNumber <= 1
SET @i = 1
ELSE
SET @i = @iNumber * dbo.Factorial( @iNumber - 1 )
RETURN (@i)
END