Sql server SQL server 2008 R2标量函数不工作
我有这个功能,它应该给我一张发票的月末日期 例如,发票(AND)的创建日期为2015-09-1,eom为2015-09-30Sql 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
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;