不带输出结果 我们一般会这样写
例子:一个输出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内置 存储过程写法
先看看语法:
1 | 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)