Sql server SQL server 2008 R2标量函数不工作

Sql server SQL server 2008 R2标量函数不工作,sql-server,function,Sql Server,Function,我有这个功能,它应该给我一张发票的月末日期 例如,发票(AND)的创建日期为2015-09-1,eom为2015-09-30 ALTER FUNCTION [dbo].[sfEOM](@ARID int, @Switch int) RETURNS date AS BEGIN declare @Letzter date declare @MaxLeistungsdatum as date if @Switch=1 set @Letzter = (select CONV

我有这个功能,它应该给我一张发票的月末日期

例如,发票(AND)的创建日期为2015-09-1,eom为2015-09-30

ALTER  FUNCTION [dbo].[sfEOM](@ARID int, @Switch int) 
RETURNS date 
AS
BEGIN    

declare @Letzter date
declare @MaxLeistungsdatum as date


if @Switch=1     
set @Letzter = (select CONVERT(date, DATEADD(MONTH,DATEDIFF   (MONTH,0,tblleistungen.LeistungsDatum),30),0) from dbo.tblleistungen where ARID=@ARID group by ARID,CONVERT(date, DATEADD(MONTH,DATEDIFF(MONTH,0,tblleistungen.LeistungsDatum),30),0) )

else
set @MaxLeistungsdatum=(select max(LeistungsDatum) from tblDatensaetzeBA where ARID=@ARID group by ARID)
set @Letzter = (select CONVERT(date, DATEADD(MONTH,DATEDIFF(MONTH,0,@MaxLeistungsdatum),30),0)) 

RETURN @Letzter
END
go
要对两个不同的表使用一个函数,我将其用作@Switch

但是

结果为NULL,其中为

select CONVERT(date, DATEADD(MONTH,DATEDIFF   (MONTH,0,tblleistungen.LeistungsDatum),30),0) from dbo.tblleistungen where ARID9307396 group by ARID,CONVERT(date, DATEADD(MONTH,DATEDIFF(MONTH,0,tblleistungen.LeistungsDatum),30),0)
带来正确的日期

当我忽略@Switch=1并且只有

set @Letzter = (select CONVERT(date, DATEADD(MONTH,DATEDIFF   (MONTH,0,tblleistungen.LeistungsDatum),30),0) from dbo.tblleistungen where ARID=@ARID group by ARID,CONVERT(date, DATEADD(MONTH,DATEDIFF(MONTH,0,tblleistungen.LeistungsDatum),30),0) )
它也有效

怎么了? 谢谢
Michael

您需要为
if
语句定义代码块:

ALTER  FUNCTION [dbo].[sfEOM](@ARID int, @Switch int) 
RETURNS date 
AS
BEGIN    
    declare @Letzter date
    declare @MaxLeistungsdatum as date

    if @Switch = 1  
    begin   
        set @Letzter = (select CONVERT(date, DATEADD(MONTH,DATEDIFF   (MONTH,0,tblleistungen.LeistungsDatum),30),0) from dbo.tblleistungen where ARID=@ARID group by ARID,CONVERT(date, DATEADD(MONTH,DATEDIFF(MONTH,0,tblleistungen.LeistungsDatum),30),0) )
    end
    else
    begin
        set @MaxLeistungsdatum=(select max(LeistungsDatum) from tblDatensaetzeBA where ARID=@ARID group by ARID)
        set @Letzter = (select CONVERT(date, DATEADD(MONTH,DATEDIFF(MONTH,0,@MaxLeistungsdatum),30),0)) 
    end
    return @Letzter
end;

最有可能错过的是
开始。。。在
else
部分结束
。非常感谢,它很有效!但我有这样的代码块。。。如果@Switch=1开始…如果@Switch=2结束…结束,但它不起作用@用户3480989。我无法回应你所拥有的。问题中的查询没有代码块。
set @Letzter = (select CONVERT(date, DATEADD(MONTH,DATEDIFF   (MONTH,0,tblleistungen.LeistungsDatum),30),0) from dbo.tblleistungen where ARID=@ARID group by ARID,CONVERT(date, DATEADD(MONTH,DATEDIFF(MONTH,0,tblleistungen.LeistungsDatum),30),0) )
ALTER  FUNCTION [dbo].[sfEOM](@ARID int, @Switch int) 
RETURNS date 
AS
BEGIN    
    declare @Letzter date
    declare @MaxLeistungsdatum as date

    if @Switch = 1  
    begin   
        set @Letzter = (select CONVERT(date, DATEADD(MONTH,DATEDIFF   (MONTH,0,tblleistungen.LeistungsDatum),30),0) from dbo.tblleistungen where ARID=@ARID group by ARID,CONVERT(date, DATEADD(MONTH,DATEDIFF(MONTH,0,tblleistungen.LeistungsDatum),30),0) )
    end
    else
    begin
        set @MaxLeistungsdatum=(select max(LeistungsDatum) from tblDatensaetzeBA where ARID=@ARID group by ARID)
        set @Letzter = (select CONVERT(date, DATEADD(MONTH,DATEDIFF(MONTH,0,@MaxLeistungsdatum),30),0)) 
    end
    return @Letzter
end;