Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 调用存储过程后传递参数_Sql_Sql Server - Fatal编程技术网

Sql 调用存储过程后传递参数

Sql 调用存储过程后传递参数,sql,sql-server,Sql,Sql Server,我有以下自定义项: 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 @firs

我有以下自定义项:

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中是否可能?如果是,如何进行

您实际上不希望为每个参数多次调用存储过程。这是一场噩梦,因为您必须在调用之间保存状态。相反,请使用可选参数:

 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”


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

您所说的“逐个传递参数”是什么意思?你能编辑这个问题并提供一个你希望调用看起来像什么的草图吗?就像在上面的函数中,如果没有中间名,它将不会执行。因此,我想将其转换为一个存储过程,但希望在调用该过程后逐个传递这些参数。在过程中不能使用
返回
来指定不同的数据类型<代码>返回仅适用于整数值,应保留用于状态/错误代码。如果希望返回单个值,请使用
OUTPUT
参数。除了
returns varchar()
不进行分析,正文也不进行分析。@AaronBertrand。固定的。(顺便说一句,在另一个案例中,我实际测试了它并复制了错误的版本。)你试过执行它吗<代码>Msg 245,16级,状态1,过程usp_name,第9行将varchar值“Gordon Linoff”转换为数据类型int时失败。您仍然无法返回字符串。@AaronBertrand。不,我使用的是SQLFiddle(我现在在Mac上),它不支持执行和定义。这是另一种情况,其中使用int以外的类型返回的
会导致执行失败,但不会导致编译失败。这被微软记录为bug了吗?我想用
@first+COALESCE(''+NULLIF(@middle,''),'')+'+@last
来改变整个
案例。这是