改变一个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”,只需要像存储过程一样省略参数。