调用存储过程后传递参数

时间:2013-08-03 21:33:49

标签: sql sql-server

我有以下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中可以吗?如果有,怎么样?

1 个答案:

答案 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'

并非所有参数都需要是可选的,如本例所示。当您指定默认值时,它们将成为可选项。