10

I have a user defined function which is used in many stored procedures which will return me some value. If it possible for me to add a new optional parameter to the same.

If I don't pass any value it should be null and if I pass some value it should take it. I don't want to go and change all the stored procedures to do so.

Example code

dbo.CalculateAverageForUser(userid int)

Can I use dbo.CalculateAverageForUser(userid int, type NVARCHAR(10) = NULL)

1
  • 1
    If you post code or XML, please highlight those lines in the text editor and click on the "code" button (101 010) on the editor toolbar to nicely format and syntax highlight it! Commented Jul 19, 2010 at 6:30

2 Answers 2

13

If you don't want to go adjusting all of your existing stored procedures that reference the function then I think you would need to create a new function with the code from your existing one

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

Then just change the existing function to the following

ALTER FUNCTION CalculateAverageForUser 
(
 @userid int
)
RETURNS float
AS
BEGIN
RETURN dbo.CalculateAverageForUser2(@userid, DEFAULT)
END
Sign up to request clarification or add additional context in comments.

Comments

3

I think the easiest way is to make a stored procedure CalculateAverageForUserAndType(int userid ,type NVARCHAR(10)) Put your original code inside the new procedure. Then change CalculateAverageForUser to

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

END

This way you can slowly migrate to your new stored procedure and your old one still works.

3 Comments

This should do nicely. Shame you can't overload, as well as use default parameters. But then SQL isn't C++ ....
This won't work. You can't call stored procedures from within functions.
same idea still but then with functions.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.