使用go-mssqldb驱动读取MS SQL存储过程输出参数失败
问题排查与解决思路
确认存储过程的参数定义
必须保证存储过程中的@result参数被定义为输出参数(OUTPUT),示例如下:CREATE PROCEDURE writeOrderPackages @msg NVARCHAR(MAX), @result INT OUTPUT AS BEGIN -- 存储过程业务逻辑,需为@result赋值 SET @result = 0; END若存储过程未将
@result标记为OUTPUT,驱动无法获取该参数的返回值。修正SQL调用语句
调用存储过程时,需要在SQL语句里显式标记输出参数,调整后的代码如下:_, err = dbobj.data.SqlDb.Exec("EXEC writeOrderPackages @msg, @result OUTPUT", sql.Named("msg", string(msgRune)), sql.Named("result", sql.Out{Dest: &result}), )核心是在
@result后添加OUTPUT关键字,明确告知SQL Server该参数的输出方向。验证参数类型匹配
确保Go代码中result变量的类型与存储过程里@result的参数类型完全一致,比如存储过程用INT,Go侧就用int(若存储过程是BIGINT则对应Go的int64)。检查执行错误
不要忽略err返回值,执行后立即校验错误:_, err = dbobj.data.SqlDb.Exec(/* 调用语句 */) if err != nil { log.Fatal(err) }很多时候输出参数未更新是因为执行过程中已出现错误,只是未被捕获。
内容的提问来源于stack exchange,提问作者geenSf
相关产品推荐
相关产品推荐

