SQL Server中的可选参数

时间:2010-07-19 06:26:31

标签: sql sql-server-2005

我有一个用户定义的函数,它在许多存储过程中使用,它会返回一些值。如果我可以添加一个新的可选参数。

如果我没有传递任何值,它应该为null,如果我传递一些值,它应该采取它。我不想去更改所有存储过程。

示例代码

dbo.CalculateAverageForUser(userid int)

我可以使用dbo.CalculateAverageForUser(userid int, type NVARCHAR(10) = NULL)

吗?

2 个答案:

答案 0 :(得分:12)

如果您不想调整引用该函数的所有现有存储过程,那么我认为您需要使用现有存储过程中的代码创建一个新函数

CREATE FUNCTION CalculateAverageForUser2
(
    @userid int,
    @param2 nvarchar(10) = NULL
)
RETURNS float
AS
/*Code from existing function goes here*/

然后只需将现有功能更改为以下

ALTER FUNCTION CalculateAverageForUser 
(
 @userid int
)
RETURNS float
AS
BEGIN
RETURN dbo.CalculateAverageForUser2(@userid, DEFAULT)
END

答案 1 :(得分:3)

我认为最简单的方法是创建一个存储过程CalculateAverageForUserAndType(int userid,type NVARCHAR(10))将原始代码放在新过程中。然后将CalculateAverageForUser更改为

dbo.CalculateAverageForUser(int userid)
AS
BEGIN
    EXEC CalculateAverageForUserAndType userid, NULL

END

通过这种方式,您可以慢慢迁移到新的存储过程,而旧的存储过程仍然有效。