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
来改变整个案例。这是