0

我有以下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 中可以吗?如果是,如何?

4

1 回答 1

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'.

并非所有参数都需要像本例中那样是可选的。当您指定默认值时,它们变为可选。

于 2013-08-03T21:50:14.123 回答