2014-03-12 1 views
0

변수에 다음 ID 값을 지정하고이를 문자열 변수에 결합합니다. 하지만 오류가 발생했습니다 :varchar 값 'XY-21'을 데이터 유형 int로 변환 할 때 변환이 실패했습니다.

varchar 값 'XY-21'을 데이터 유형 int로 변환 할 때 변환이 실패했습니다.

절차는 다음과 같다 : 나는 프로 시저를 실행할 때

ALTER PROCEDURE [dbo].[SPInsertNewDetail] 
(
    @MLNo varchar(20)= null, 
    @MCL varchar(20)= null, --Suppose it has value XY- 
    @MCCL VARCHAR(20) OUTPUT 
) 
AS 
    DECLARE @Next_Id int 
    SELECT @Next_Id = IDENT_CURRENT('New_Master') + IDENT_INCR('New_Master') //Suppose it is 21 
    PRINT @Next_Id 
    SET @MCCL = @MCL + cast(@Next_Id as varchar) 
    PRINT @MCCL 
    INSERT INTO New_Master 
    (MCCL, MLNo) 
    VALUES (@MCCL, @MLNo) 
    PRINT @MCCL 
RETURN @MCCL 

는 널 (null)로 @MCCL를 반환하지만 표는 올바른 값을 가지고있다.

+0

질문은'VARCHAR'에'INT'에서 변환 말한다하지만 코드는 VARCHAR''에 INT''로 변환했다. 'New_Master' 테이블에'MCCL' 컬럼의 데이터 타입은 무엇입니까? –

+0

'@ MCL' = NULL, 어디에서 설정합니까? 또는 sproc이 호출 될 때 어떤 값이 주어 집니까? – NickyvV

+0

@VladimirOselsky, 그것은 varchar입니다. – Dhwani

답변

3

문제는 RETURN @MCCL 라인에서 발생합니다. RETURN SQL의 문은 INT 형식을 반환하는 데에만 사용됩니다. 출력을 위해서는 RETURN을 포함 할 필요가 없습니다. 해당 줄을 제거하면 proc이 작동합니다. 또한 다음과 같이 수정합니다. 당신이 매개 변수의 SQL 서버에 OUTPUT를 지정한 경우

ALTER PROCEDURE [dbo].[SPInsertNewDetail] 
    (
    @MLNo VARCHAR(20) = NULL 
    ,@MCL VARCHAR(20) = NULL 
    ,@MCCL VARCHAR(20) OUTPUT 
    ) 
AS 
    BEGIN 
     DECLARE @Next_Id INT 
     SELECT @Next_Id = IDENT_CURRENT('New_Master') + IDENT_INCR('New_Master') 
     PRINT @Next_Id 
     SET @MCCL = @MCL + CAST(@Next_Id AS VARCHAR) 
     PRINT @MCCL 
     INSERT INTO New_Master 
       (MCCL, MLNo) 
      VALUES (@MCCL, @MLNo) 
     PRINT @MCCL 
    END 

이 절차 마무리가 실행되면 반환해야한다는 것을 알고있다. 다음은 변수 OUTPUT의 간단한 테스트입니다.

CREATE PROCEDURE [dbo].TEST_Out 
    (
    @pSPIn VARCHAR(10) 
    ,@pSPOut VARCHAR(10) OUTPUT 
    ) 
AS 
    BEGIN 
     SET @pSPOut = @pSPIn + ' ' + 'this' 
    END 

DECLARE @stuff VARCHAR(20); 

EXEC dbo.TEST_Out 
    @pSPIn = 'blog' 
    ,@pSPOut = @stuff OUTPUT 

PRINT @stuff 
+0

대단한 .... 내 지식이 부족했습니다 .... 정말 고마워요. – Dhwani

관련 문제