2010-02-03 2 views
1

오류를 응용 프로그램에 전달해야합니다. 아래에 저장 프로 시저를 작성했습니다. 오류가 응용 프로그램에 전달 되었습니까? 아니면 더 많은 것을 수행해야합니까?SQL 서버가 응용 프로그램에 오류를 전달합니다.

예 :

create procedure insert_emp 
as 
    begin try 
     begin tran 
     insert into emp values(..........) 
     commit; 
    end try 

    begin catch 
    if @@trancount > 0 
    rollback 
    declare @errMessage varchar(2000), 
    declare @errNumber int 
    select @errMessage = error_message(), @errNumber = error_number() 
    raiserror(@errMessage, @errNumber,1) 
    end catch 

오류가없는 경우 0을 전달해야하고 오류가 발생한 경우 오류 번호가 전달되면 raiserror를 사용하여 수행하는 방법은 무엇입니까? raiserror를 사용하여 error_table에 오류를 기록하려면 어떻게해야합니까? 더 중요한 것은 예를 들어 위와 같을 수 있습니다. 오류를 응용 프로그램에 전달 하시겠습니까?

답변

1

raiserror(@errMessage, @errNumber,1)을 전달하지 마십시오. RAISERROR에 대한 인수는 메시지 ID, 심각도, 상태입니다. 심각도가 인 @errNumber를 전달 중입니다. 올바르지 않습니다.

대신 사용자 지정 오류가 발생하고 메시지 형식 삽입과 같은 오류 메시지에 잡힌 예외 정보를 전달한다 : 당신은 오류 심각도 (16)를 사용한다

RAISERROR(N'insert_emp: Error %i: %s', 16, 1, @errNumber, @errMessage); 

클라이언트에서 SQLException을 발생하려면 (또는 클라이언트 액세스 기술에 따라 다른 예외).

정보 메시지에는 심각도 1을 사용해야합니다.

1

RAISERROR은 클라이언트에 오류를 전달합니다.

데이터베이스에 오류를 기록하려면 먼저 catch 영역에서 오류를 기록한 다음 raiserror으로 전화하십시오.

raiserror을 호출하는 대신 오류 코드를 반환하려는 클라이언트에서 오류를 전달하지 않으려면이 절차에서 0이 아닌 값을 반환하면됩니다. :

RETURN -1 
+0

감사합니다. 가브리엘 – niceApp

관련 문제