无法在SQL Proc中设置变量的返回值

时间:2010-02-05 17:22:41

标签: sql-server-2005 tsql stored-procedures

我创建了一个简单的存储过程,它返回一个字符串

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

提前感谢您的帮助。

3 个答案:

答案 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