调用SQL Server存储过程返回值始终为0的问题排查
解决思路
区分存储过程的返回码与实际返回值
你当前用EXEC @DocID = 存储过程获取的是SQL存储过程的返回码(由RETURN语句返回,默认成功执行返回0),但VB中拿到的DocID大概率是存储过程通过输出参数或结果集返回的,而非返回码。针对输出参数的处理方式
如果存储过程是通过输出参数返回DocID,需要显式声明对应变量并标记为输出参数传入,示例代码:
DECLARE @TargetDocID INT -- 替换为实际参数列表,确保@DocID参数带OUTPUT关键字 EXEC PADS2.dbo.Document_Add @SystemCode='你的系统码', @DocID=@TargetDocID OUTPUT SELECT @TargetDocID AS 获取到的DocID
可通过sp_helptext 'PADS2.dbo.Document_Add'查看存储过程定义,确认是否包含类似@DocID INT OUTPUT的参数声明。
- 针对结果集的处理方式
如果存储过程是通过SELECT语句返回DocID结果集,需要用临时表或表变量捕获结果,示例代码:
DECLARE @TempDoc TABLE (DocID INT) -- 传入正确参数执行存储过程,将结果集插入临时表 INSERT INTO @TempDoc EXEC PADS2.dbo.Document_Add @SystemCode='你的系统码' -- 从临时表中取出DocID SELECT DocID FROM @TempDoc
- 核对参数一致性
确保SQL调用时传入的所有参数(如@SystemCode等)的数据类型、取值、参数顺序和VB代码中完全一致,避免因参数不匹配导致存储过程执行分支异常,返回默认的0。
内容的提问来源于stack exchange,提问作者MartMX
相关产品推荐
相关产品推荐

