我有这个脚本:
CREATE FUNCTION dbo.CheckIfSFExists(@param1 INT, @param2 BIT = 1 )
RETURNS BIT
AS
BEGIN
IF EXISTS ( bla bla bla )
RETURN 1;
RETURN 0;
END
GO
Run Code Online (Sandbox Code Playgroud)
我想以这种方式在一个过程中使用它:
IF dbo.CheckIfSFExists( 23 ) = 0
SET @retValue = 'bla bla bla';
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
为程序或函数dbo.CheckIfSFExists提供的参数数量不足.
为什么不起作用?
我已经在SQL Server 2005中有一个函数:
ALTER function [dbo].[fCalculateEstimateDate] (@vWorkOrderID numeric)
Returns varchar(100) AS
Begin
<Function Body>
End
Run Code Online (Sandbox Code Playgroud)
我想修改此函数以接受另外的可选参数@ToDate.我将在函数中添加逻辑,如果@Todate提供,那么继续使用现有代码执行其他操作.
我将功能修改为:
ALTER function [dbo].[fCalculateEstimateDate] (@vWorkOrderID numeric,@ToDate DateTime=null)
Returns varchar(100) AS
Begin
<Function Body>
End
Run Code Online (Sandbox Code Playgroud)
现在我可以调用函数:
SELECT dbo.fCalculateEstimateDate(647,GETDATE())
Run Code Online (Sandbox Code Playgroud)
但它在跟随电话时出错:
SELECT dbo.fCalculateEstimateDate(647)
Run Code Online (Sandbox Code Playgroud)
如
为程序或函数dbo.fCalculateEstimateDate提供的参数数量不足.
根据我的理解不应该发生.
我错过了什么吗?提前致谢.
我有一个用户定义的函数,在许多存储过程中使用它将返回一些值.如果我可以添加一个新的可选参数.
如果我没有传递任何值,它应该为null,如果我传递一些值,它应该采取它.我不想去更改所有存储过程来执行此操作.
示例代码
dbo.CalculateAverageForUser(userid int)
Run Code Online (Sandbox Code Playgroud)
我可以用吗 dbo.CalculateAverageForUser(userid int, type NVARCHAR(10) = NULL)