2016-11-07 7 views
1

에 내가 SQL 서버에 새로 온 사람, 그리고 내가 고칠 수 없습니다이 오류가 있습니다SQL 서버 출력 및 반환 값이 과정

메시지 245, 수준 16, 상태 1, 프로 시저 정보, 오류, 내가 그것을 어떻게 어디를 해결할 수 있습니다 보여주세요 수 int 데이터 형식

에 '스티븐'은 VARCHAR 값을 변환 할 때 선 (11)
변환 실패?

코드는 다음과 같이 감사합니다.

CREATE PROCEDURE info (@id int, @howMuch int OUTPUT) 
AS 
    SELECT * 
    FROM emp 
    WHERE empno = @id; 

    SELECT @howMuch = COUNT(*) 
    FROM emp; 

    DECLARE @name varchar(100) 

    SELECT @name = ename 
    FROM emp 
    WHERE empno = @id 

    RETURN @name 

-- execute the procedure. It throws error. 
DECLARE @num_rows int, @who varchar(100) 
EXECUTE @who = info 100, @num_rows OUTPUT 

SELECT @num_rows, @who 
+0

나는 것으로 나타났습니다 "@name", 프로 시저가 작동하며 "@name"이 표시됩니다. "return"대신 "@name"을 출력 매개 변수로 사용하면 잘 작동합니다. "return"을 사용하여 @name을 반환하는 경우에만 오류가 발생한 것으로 보입니다. 이유가 무엇인가요? 이해하기가 부족합니다. – andrea

+0

당신은 PRINT와 RETURN이하는 일을 오해하고 있습니다. RETURN이 호출자에게 값을 푸시하는 동안 Print는 컴파일러에 값을 푸시합니다 (예 : 쿼리에서 정의한 값). 이러한 규칙은 [MSDN 설명서] (https://msdn.microsoft.com/en-us/library/ms187926.aspx)에 정의되어 있습니다. 일반적으로 FUNCTION을 사용하는 것이 적절하지만 proc 자체에서 OUPUT 문을 사용할 수도 있습니다. 호출자에게 값을 반환합니다. –

+1

예, 이제 알겠습니다. 나는 반환의 사용을 이해하지 못했습니다. 전 int가 아닌 모든 유형의 데이터를 반환 할 수 있다고 생각했습니다. 이제는 분명합니다. 고맙습니다. – andrea

답변

2

저장 프로 시저의 반환 값은 항상 정수 데이터 형식이어야합니다. 함수를 사용하면 다른 데이터 형식을 반환 할 수 있지만 하나의 값만 반환 할 수 있습니다. 대신 사용하는 경우 내가 시각화 "인쇄"를 사용하여 "반환" : 저장 프로 시저에서 두 개의 값이 필요합니다, 당신은 두 개의 출력 매개 변수를 사용할 수

은 ...

CREATE PROCEDURE info2 (@id int , @howMuch int OUTPUT, @name varchar(100) OUTPUT) AS 
+1

예, 이제 알았습니다. 나는 반환의 사용을 이해하지 못했습니다. 전 int가 아닌 모든 유형의 데이터를 반환 할 수 있다고 생각했습니다. 이제는 분명합니다. 고맙습니다. – andrea

+0

이 페이지에는 저장 프로 시저에서 데이터를 다시 가져 오는 두 가지 방법에 대한 정보가 있습니다. https://msdn.microsoft.com/en-us/library/ms188655.aspx 내가 본 많은 사용법은 '반환 '오류 코드를 반환하지만, 그것은 유일한 경우 일 필요는 없습니다. 귀하의 예제에서 반환 값 대신 @ 반환 값으로 값을 반환 할 수 있습니다. 흔히 삭제 된 횟수, 삽입 된 횟수 등을 반환하기 위해 반환 코드를 사용합니다. – Nayak