如何在SQL中创建具有2个参数的函数?

如何在SQL中创建具有2个参数的函数?,sql,sql-server,function,Sql,Sql Server,Function,我正在尝试创建一个函数,该函数将给定一个UserID作为参数,对完成状态的视频的实际持续时间的总分钟数求和。这是我到目前为止所拥有的,但我不知道如何为完成状态添加参数。这来自一个具有StatusID和StatusText的不同状态表。或者我会做一个NOTNULL语句吗 CREATE FUNCTION dbo.vc_VideoRunTime(@userID int) RETURNS int AS BEGIN DECLARE @returnValue int SELECT @returnValu

我正在尝试创建一个函数,该函数将给定一个UserID作为参数,对完成状态的视频的实际持续时间的总分钟数求和。这是我到目前为止所拥有的,但我不知道如何为完成状态添加参数。这来自一个具有StatusID和StatusText的不同状态表。或者我会做一个NOTNULL语句吗

CREATE FUNCTION dbo.vc_VideoRunTime(@userID int)
RETURNS int AS 
BEGIN 
DECLARE @returnValue int
SELECT @returnValue = DATEDIFF (n, StartDateTime, EndDateTime) FROM vc_Video
WHERE vc_Video.vc_UserID = @userID
RETURN @returnValue
END
GO

如果您的完成状态表示为
NULL
endtime,则您的函数正常:

CREATE FUNCTION dbo.vc_VideoRunTime (
    @userID int
)
RETURNS int AS 
BEGIN 
    DECLARE @returnValue int;
    SELECT @returnValue = SUM(DATEDIFF(minute, v.StartDateTime, v.EndDateTime))
    FROM vc_Video v 
    WHERE v.vc_UserID = @userID ;

    RETURN @returnValue;
END;
GO
为什么??如果任一参数为
NULL
,则
DATEDIFF()将返回
NULL
。然后,
SUM()
将返回
NULL

注意,我将
n
更改为
minute
。这更具可读性。(我不知道有谁用“n”选项来表示“分钟”,这让我想到了“纳秒”。)

如果在这种情况下确实希望函数返回
0
,请使用
COALESCE()


是的,我使用的是SQL Server,那么上面的另一个输入参数缺少什么?或者,是否要返回多个值?我只需要返回总分钟数,但某些视频尚未完成,因此结果为空,我正在尝试删除空结果。我只是不知道如何为finished status添加输入参数,以便只获取总分钟数的返回值。您希望函数返回
总分钟数
,以及
finished status
?为什么不修改WHERE子句,比如
WHERE vc_Video.vc_UserID=@UserID和vc_Video.EndDateTime空
子句?
    RETURN COALESCE(@returnValue, 0);