在sql函数中使用if语句

时间:2011-05-02 14:32:26

标签: 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

错误是, 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'不是公认的内置函数名称。

请帮帮我朋友。

3 个答案:

答案 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