将varchar值转换为数据类型int时转换失败 - 调用存储过程时

问题描述:

我有一个简单的存储过程,它接受INT的一个输入。该过程还将一个值(@KEY)声明为VARCHAR。该过程的逻辑将@KEY的值设置为字母数字值。将varchar值转换为数据类型int时转换失败 - 调用存储过程时

最后,该过程返回@KEY的值:

ALTER PROCEDURE [dbo].[sp_Get_KEY] 

@member  Int 

AS 
BEGIN 

    SET NOCOUNT ON 

    DECLARE @KEY  VARCHAR(12) 

    SET @KEY = '' 

    IF Exists (Select * From Version Where NAME = 'WIN' AND MEMBER = @member) 
     Begin 
      Set @KEY = '95+' 
     End 

    RETURN @KEY 

END -- END OF PROCEDURE 

当我调用使用的程序:

申报@return_key VARCHAR(20) EXEC @return_key = dbo.sp_Get_KEY 2222

我收到以下错误:

将varchar值'95 + E'转换为数据类型int时转换失败。

任何想法?

+0

如果你只是用'EXEC dbo.sp_Get_KEY 2222'什么? –

+0

请参阅https://docs.microsoft.com/zh-cn/sql/relational-databases/stored-procedures/return-data-from-a-stored-procedure – Serg

您可以使用out参数或resulset返回任何数据类型。
返回值应该总是整数

ALTER PROCEDURE [dbo].[sp_Get_KEY] 
    @member  Int 
    ,@KEY VARCHAR(12) OUTPUT 
AS 
BEGIN 

SET NOCOUNT ON 

--DECLARE @KEY  VARCHAR(12) 

SET @KEY = '' 

IF Exists (Select * From Version Where NAME = 'WIN' AND MEMBER = @member) 
    Begin 
     Set @KEY = '95+' 
    End 

RETURN 0; 
END 

例子:

declare @KEY VARCHAR(12); 
exec dbo.sp_Get_KEY 2222, @KEY OUTPUT; 
--SELECT @KEY; 
PRINT @KEY; 
+0

谢谢。我如何从SQL中调用它 - 指定输出参数的语法是什么? – Sanxion

+0

我改变了答案 – Fabio

+0

谢谢,但我试图避免'SELECT'语句,因为我从另一个存储过程中调用该存储过程,该存储过程使用第一个返回值执行一些其他逻辑 - 然后在内部调用码。如果我使用'SELECT'语句,则返回多个记录集,然后中断代码。 – Sanxion