我创建了一个简单的存储过程,它返回一个字符串
create proc im.mmtest as
select 'testvalue'
go
然后我调用SP并将其返回值设置为变量。通过选择所有三条线并按F5来执行该块。我确实看到执行exec语句时的值,但是我没有在select @ret_var
中得到字符串值。
请帮我理解原因。我在一个复杂的SP中使用它,并且不知道为什么SP的值没有正确显示。
declare @ret_var as varchar(10)
exec @ret_var = im.mmtest
select @ret_var
提前感谢您的帮助。
答案 0 :(得分:1)
你没有返回一个返回值(你必须使用只支持整数的RETURN语句来做),而是返回一个结果集。请尝试输出参数:
create proc im.mmtest
@OutVal VARCHAR(10) OUTPUT
as
select @OutVal = 'testvalue'
go
然后像这样调用它:
DECLARE @Val VARCHAR(10)
EXECUTE im.mmtest @Val OUTPUT
SELECT @Val
返回值(必须是数字)的语法是:
RETURN(1) -- RETURN value 1
您当前使用的语法将获得该返回值。但你不能用任何非数字的东西来做,因此你最好使用OUTPUT参数。
答案 1 :(得分:0)
create proc im.mmtest as
select 'testvalue'
RETURN 99 --insert value here
go
返回值由RETURN设置,始终为整数
这样的SELECT将返回一个记录集。这里,一列一行
也许你想要一个输出参数
create proc im.mmtest
@foo varchar(100) OUTPUT
as
select @foo = 'testvalue'
go
DECLARE @bar varchar(100)
EXEC im.mmtest @bar OUTPUT
SELECT @bar
答案 2 :(得分:0)
在proc。的输出参数中返回varchar值。
CREATE PROC im.mmtest (@retVal varchar(10) OUTPUT) AS
SELECT @retVal = 'testvalue'
GO
...然后从SP获得值:
DECLARE @ret_var varchar(10)
EXEC im.mmtest(@ret_var)
SELECT @ret_var