我有以下UDF:
create function fn_name
(@first varchar(50),
@middle varchar(50),
@last Varchar(50))
returns varchar(100)
as
begin
return
case
when @middle is null then @first+' '+@Last
when Len(@middle)=0 then @first+' '+@Last
else @first+' '+@middle+' '+@Last
end
end
我正在考虑为上面的函数创建一个存储过程,但是这样我在调用存储过程之后逐个传递参数。在SQL Server中可以吗?如果有,怎么样?
答案 0 :(得分:0)
您实际上并不想为每个参数多次调用存储过程。这是一场噩梦,因为你必须在通话之间保存状态。而是使用可选参数:
create procedure usp_name (
@first varchar(50) = '',
@middle varchar(50) = '',
@last varchar(50) = '',
@name varchar(100) output
)
as
begin
select @name = (case when @middle is null then @first+' '+@Last
when Len(@middle)=0 then @first+' '+@Last
else @first+' '+@middle+' '+@Last
end);
end; -- usp_name
现在,所有三个参数都是可选的。如果你这样调用它:
declare @name varchar(100);
exec @name = @name output;
然后它将返回''
。如果你打电话:
declare @name varchar(100);
exec @first = 'Gordon', @last = 'Linoff', @name = @name output;
然后你会得到'Gordon Linoff'
。
并非所有参数都需要是可选的,如本例所示。当您指定默认值时,它们将成为可选项。