2017-09-21 7 views
0

INT의 한 입력을받는 간단한 저장 프로 시저가 있습니다. 또한이 프로시 저는 하나의 값 (@KEY)을 VARCHAR로 선언합니다. 프로 시저의 논리는 @KEY의 값을 영숫자 값으로 설정합니다.저장 프로 시저를 호출 할 때 varchar 값을 int 유형으로 변환 할 때 변환이 실패했습니다.

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 

I 사용 절차를 호출 할 때 :

선언 @return_key VARCHAR (20) 간부 @return_key = 2,222 dbo.sp_Get_KEY

마지막 절차 @KEY의 값을 반환

나는 다음과 같은 오류가 나타납니다 int 데이터 형식에 VARCHAR 값 95 + E '를 변환 할 때

변환에 실패했습니다.

아이디어가 있으십니까?

+0

그리고 당신이 단지'간부 dbo.sp_Get_KEY를 2222' 사용하는 경우? –

+0

https://docs.microsoft.com/en-us/sql/relational-databases/stored-procedures/return-data-from-a-stored-procedure – Serg

답변

0

매개 변수 또는 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