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

时间:2017-09-21 07:33:55

标签: sql-server return

我有一个简单的存储过程,它接受INT的一个输入。该过程还将一个值(@KEY)声明为VARCHAR。该过程的逻辑将@KEY的值设置为字母数字值。

最后,该过程返回@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。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用out参数或结果集来返回任何数据类型 返回值应始终为整数

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;