不带输出结果 我们一般会这样写
例子:一个输出6位递增号码结果
ALTER proc GetCode @tb varchar(50), @tag varchar(50) as declare @sqlstring nvarchar(max) set @sqlstring=' SELECT '''+@tag+'''+RIGHT(1000001+ISNULL(RIGHT(MAX(FCode),6),0),6) FROM '+@tb --print @sqlstring exec (@sqlstring) GO
但是如果存储过程需要和其他过程继续运算,我需要把结果放到一个变量,这个时候 就需SQL内置 存储过程写法
先看看语法:
sp_executesql [ @stmt = ] stmt [ {, [@params=] N'@parameter_name data_type [ [ OUT [ PUT ][,...n]' } {, [ @param1 = ] 'value1' [ ,...n ] } ]
然后我们来改造
(用法解释 : 我们需要把结果放入@temp, 然后 在 sp_executesql 中声名 @temp的类型 后面把output的变量放后面 , 这样 temp 的值就会赋给 outvalue 里面了)
例子:
CREATE procedure GetCodeByOut @tb varchar(50), @tag varchar(50), @outvalue varchar(50) output as declare @sqls nvarchar(4000) set @sqls='SELECT @temp= '''+@tag+'''+RIGHT(1000001+ISNULL(RIGHT(MAX(FCode),6),0),6) from '+@tb exec sp_executesql @sqls,N'@temp varchar(50) output',@outvalue output
调用
declare @userName varchar(50) exec GetCodeByOut 'T_Car','HB',@userName output select @userName
如果有多个输出参数 同理依次声名即可
declare @num int, @sqls nvarchar(4000) ,@sname char(10) set @sqls='select @a=sno,@b=sname from aa ' exec sp_executesql @sqls,N'@a int output,@b char(10) output',@num output,@sname output select @num select @sname
参考文章:
https://blog.csdn.net/lin00kun11/article/details/50535643