7
votes

Utilisation de l'instruction IF dans la fonction SQL

J'ai un code comme celui-ci

create function factfind(@num integer) 
returns integer 
as
begin
if   (@num=1) then
return 1;
else
return(@num*factfind(@num-1));
end if;
end


0 commentaires

3 Réponses :


4
votes

Exécuter ceci: xxx

ou: xxx


0 commentaires

8
votes
...
begin
    return ( CASE
                WHEN @num=1 THEN 1
                ELSE @num * dbo.factfind(@num-1)
             END
        );
end
Edit: needs to be dbo.factfind because scalar udfs must be schema qualified

1 commentaires

Pas une déclaration de cas nécessite une "fin"?



2
votes

Le problème que vous avez est en partie la syntaxe de l'instruction IF dans TSQL, la bonne chose à faire est la suivante:

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 commentaires

Ne devriez-vous pas inclure un sinon car vous retournez deux fois?


La fonction devrait renvoyer une décimale (38,0) car les résultats sont assez grands et ne peuvent pas être contenus dans un entier de 12!