错误“附近的错误语法if,then,else”请更正

问题描述:

我正在创建一个计算兴趣的函数。 dbo.days1()是一个函数,它没有给出天错误“附近的错误语法if,then,else”请更正

CREATE FUNCTION dbo.int1 
    (

    ) 

RETURNS int 
as 
begin 
declare @days int 

set @days = dbo.days1() 
if @days > 0 
then 
return(select((((dbo.delivery.roi * dbo.delivery.adv1)/100)/365)*@days)from delivery) 
    else 
    return (0) 
    end if  
    END 

它给了我语法错误附近,如果当时和else.how纠正

你为什么不能尝试像下面

CREATE FUNCTION dbo.int1 
    (

    ) 
    RETURNS int 
    as 
    begin 
    declare @days int 
    set @days = dbo.days1() 
    if @days > 0 
    begin 
     return(select((((dbo.delivery.roi * dbo.delivery.adv1)/100)/365)*@days)from delivery) 
    end 

    return (0)  
    end 
+0

它给DIFF错误“最后语句中包含的语句必须是返回语句“ – 2014-10-09 11:27:31

+0

我已经更新了我的代码。现在可以尝试 – SDK 2014-10-09 11:34:21

+0

它给出了相同的错误 – 2014-10-09 11:41:09

试试这个

CREATE FUNCTION dbo.int1 
    (

    ) 

RETURNS int 
as 
begin 
declare @days int 

set @days = dbo.days1() 
if @days > 0 
Begin 
    return(select((((dbo.delivery.roi * dbo.delivery.adv1)/100)/365)*@days)from delivery) 
End 

else 
Begin 
    return (0) 
End 

END 

没有then并在SQL 012 end if部分声明。
参考MSDN

你的整个功能可以改写成一条线,以排除是否与任何其他变量,这使得它有点难以虽然阅读:

create function dbo.int1() 
    returns int 
as 
begin 
    declare @days  int = dbo.days1(), 
      @returnInt int = 0 

    if @days > 0 
    begin 
    set @returnInt = (isnull((select((((dbo.delivery.roi * dbo.delivery.adv1)/100)/365)*dbo.days1())from delivery), 0)) 
    end 

    return (@returnInt) 
end 
+0

。有效。 – 2014-10-09 11:32:43

+0

但我不想要负面价值。如果dbo.days1()返回一个负值,那么函数dbo.int1()应该返回0 – 2014-10-09 11:38:55

+0

已更新代码以迎合负向日期 – 2014-10-09 11:41:30