Access VBA接收SQL Server存储过程返回值时遇varchar转int错误
问题根源与解决方案
你的问题出在SQL Server存储过程的RETURN语句用法错误——SQL Server的RETURN只能返回整数类型的值,它是用来返回存储过程的执行状态码(比如0表示成功,非零表示错误),根本不支持返回varchar字符串。
你在存储过程里写了return @CreateOrUpdate,而@CreateOrUpdate是varchar类型的'Create',SQL Server会尝试把这个字符串隐式转换成整数,自然就抛出了"无法将varchar转换为int"的错误,这和你的VBA代码里的参数定义无关。
修正步骤:
修改SQL Server存储过程
只需要给输出参数赋值即可,不需要用RETURN返回它。如果需要返回执行状态,可以用RETURN 0表示成功:create procedure proc @CreateOrUpdate varchar(6) output as begin select @CreateOrUpdate = 'Create' -- 可选:返回状态码,0表示执行成功 RETURN 0 end完善Access VBA代码
你的参数定义是对的,但需要执行命令后才能读取输出参数的值:Dim Com As ADODB.Command Set Com = New ADODB.Command With Com .ActiveConnection = Cnn ' 已确认连接正常 .CommandType = adCmdStoredProc .CommandText = "proc" .Parameters.Append .CreateParameter("@CreateOrUpdate", adVarChar, adParamOutput, 6) ' 执行存储过程 .Execute ' 读取输出参数的值 Debug.Print .Parameters("@CreateOrUpdate").Value End With
为什么其他同语法的存储过程没问题?
大概率那些存储过程没有用RETURN返回varchar类型的输出参数,只是单纯给输出参数赋值,没有触发隐式类型转换的逻辑,所以能正常运行。
内容的提问来源于stack exchange,提问作者BellaFiorenza
相关产品推荐
相关产品推荐

