Необязательный параметр в SQL-сервере

У меня есть пользовательская функция, которая используется во многих хранимых процедурах, которые возвратят мне некоторое значение. Если это возможно для меня добавить новый необязательный параметр к тому же.

Если я не передаю какое-либо значение, оно должно быть нулевым, и если я передам какое-то значение, он должен его принять. Я не хочу идти и изменять все хранимые процедуры для этого.

Пример кода

dbo.CalculateAverageForUser(userid int)

Можно ли использовать dbo.CalculateAverageForUser(userid int, type NVARCHAR(10) = NULL)

Ответ 1

Если вы не хотите корректировать все существующие хранимые процедуры, ссылающиеся на эту функцию, я думаю, вам нужно будет создать новую функцию с кодом из существующего

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

Ответ 2

Я думаю, что самый простой способ - сделать хранимую процедуру CalculateAverageForUserAndType (int userid, введите NVARCHAR (10)). Поместите исходный код в новую процедуру. Затем измените CalculateAverageForUser на

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

END

Таким образом, вы можете медленно перейти на новую хранимую процедуру, и ваш старый файл все еще работает.