T-SQL中嵌套执行两个存储过程代码运行异常如何解决
问题排查
你的代码无法正常运行是两处语法/用法错误导致的:
- 调用第一个存储过程
sp_TLKARSILIK时,参数列表漏写了逗号,@curr_unit和后面的输出参数直接连写,属于基础语法错误。 - 存储过程的输出参数没有显式加
OUTPUT标记:T-SQL里存储过程参数默认是输入方向,如果你要把存储过程内部计算得到的值回传给外层声明的变量,必须在调用时给对应参数加上OUTPUT(可简写为OUT)关键字,否则外层变量拿不到内部的赋值结果,后续传给第二个存储过程的@currency_val会是NULL值。
修正后的可运行代码
DECLARE @currency_val decimal(18, 2); DECLARE @first_price decimal(18, 2) = 80; DECLARE @curr_unit nvarchar(50) = 'eur'; -- 执行第一个存储过程,获取计算完成的货币值 EXEC sp_TLKARSILIK @first_price, @curr_unit, @currency_val OUTPUT; -- 将第一个存储过程返回的结果传入第二个存储过程执行 EXEC sp_DOVIZKARSILIK @currency_val, 'eur';
补充说明:如果按上述写法修改后
@currency_val依然取不到值,需要检查sp_TLKARSILIK的存储过程定义:确认该过程的第三个参数本身被定义为OUTPUT方向,且过程内部存在对该参数的赋值逻辑(例如SET @currency_val = 对应计算结果),否则外层变量无法拿到返回值。
内容的提问来源于stack exchange,提问作者RCeyda
相关产品推荐
相关产品推荐

