我有一个用户定义的函数,它在许多存储过程中使用,它会返回一些值。如果我可以添加一个新的可选参数。
如果我没有传递任何值,它应该为null,如果我传递一些值,它应该采取它。我不想去更改所有存储过程。
示例代码
dbo.CalculateAverageForUser(userid int)
我可以使用dbo.CalculateAverageForUser(userid int, type NVARCHAR(10) = NULL)
答案 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
通过这种方式,您可以慢慢迁移到新的存储过程,而旧的存储过程仍然有效。