2011-05-02 2 views
4

У меня есть код, как этопомощью, если оператор в функции SQL

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, процедура factfind, линия 5 Неправильный синтаксис около ключевого слова 'затем' , Msg 156, Level 15, State 1, Process factfind, Line 7 Неверный синтаксис рядом с ключевым словом «else». Msg 195, уровень 15, состояние 10, фактура процесса, строка 8 «factfind» не является признанным встроенным именем функции.

, пожалуйста, помогите мне с друзьями.

ответ

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 
+0

благодарит друзей, это помогает много – anvisha

6
... 
begin 
    return (CASE 
       WHEN @num=1 THEN 1 
       ELSE @num * dbo.factfind(@num-1) 
      END 
     ); 
end 

Edit: должно быть dbo.factfind потому скалярные UDFs должна быть схема квалифицирован

+0

Не требует ли инструкция CASE «КОНЕЦ»? –

+0

@ ZachSmith да, спасибо – gbn

2

Проблема у вас есть в части синтаксис оператора if в TSQL, правильная вещь:

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 
+0

Разве вы не включаете 'ELSE' там, так как вы возвращаетесь дважды? – JNK

+0

попробуйте мою функцию, пожалуйста !, меньше, и я думаю, что это правильно. – mariocase84

+0

функция должна возвращать Decimal (38.0), потому что результаты довольно велики и не могут содержаться в целых числах от 12! – mariocase84

Смежные вопросы