改变一个SQL服务器函数来接受新的可选参数

我已经在SQL Server 2005中有一个函数:

ALTER function [dbo].[fCalculateEstimateDate] (@vWorkOrderID numeric) Returns varchar(100) AS Begin <Function Body> End 

我想修改这个函数来接受额外的可选参数@ToDate。 我打算在函数中添加逻辑,如果@Todate提供,然后做一些其他的事情继续与现有的代码。

我修改了这个function:

 ALTER function [dbo].[fCalculateEstimateDate] (@vWorkOrderID numeric,@ToDate DateTime=null) Returns varchar(100) AS Begin <Function Body> End 

现在我可以调用函数为:

 SELECT dbo.fCalculateEstimateDate(647,GETDATE()) 

但是在下面的调用中出现错误:

 SELECT dbo.fCalculateEstimateDate(647) 

为程序或函数dbo.fCalculateEstimateDate提供的参数数量不足。

根据我的理解,这不应该发生。

我错过了什么? 提前致谢。

CREATE FUNCTION

当函数的参数具有默认值时,必须在调用函数以检索默认值时指定关键字DEFAULT 。 此行为不同于在存储过程中使用具有默认值的参数,其中省略该参数也意味着默认值。

所以你需要做的是:

 SELECT dbo.fCalculateEstimateDate(647,DEFAULT) 

保持SELECT dbo.fCalculateEstimateDate(647)调用工作的方式是:

 ALTER function [dbo].[fCalculateEstimateDate] (@vWorkOrderID numeric) Returns varchar(100) AS Declare @Result varchar(100) SELECT @Result = [dbo].[fCalculateEstimateDate_v2] (@vWorkOrderID,DEFAULT) Return @Result Begin End CREATE function [dbo].[fCalculateEstimateDate_v2] (@vWorkOrderID numeric,@ToDate DateTime=null) Returns varchar(100) AS Begin <Function Body> End 

我已经find了这里build议的EXECUTE命令T-SQL – 具有默认参数的函数能够正常工作。 使用这种方法时,调用函数时不需要“DEFAULT”,只需要像存储过程一样省略参数。