我已经在SQL Server 2005中有一个函数:
ALTER function [dbo].[fCalculateEstimateDate] (@vWorkOrderID numeric)
Returns varchar(100) AS
Begin
<Function Body>
End
我想修改此函数以接受可选参数@ToDate。我将在函数中添加逻辑,如果@Todate提供,那么继续使用现有代码执行其他操作。
我将函数修改为:
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)
作为
为程序提供的参数数量不足或 function dbo.fCalculateEstimateDate。
根据我的理解不应该发生。
我错过了什么吗? 提前谢谢。
答案 0 :(得分:97)
当函数的参数具有默认值时,必须在调用函数时指定关键字
DEFAULT
以检索默认值。此行为与在存储过程中使用具有默认值的参数不同,其中省略参数也意味着默认值。
所以你需要这样做:
SELECT dbo.fCalculateEstimateDate(647,DEFAULT)
答案 1 :(得分:21)
保持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
答案 2 :(得分:0)
我发现这里T-SQL - function with default parameters建议的EXECUTE命令运行良好。使用这种方法,调用函数时不需要“DEFAULT”,只需省略参数就像存储过程一样。