2008-09-26 4 views
4

시나리오 : C# apps는 SQL2000을 사용합니다. 그것은 app에서 try catch 내에서 3 개의 저장된 procs를 excecute합니다. catch에서 오류는 표시되지 않습니다. 일부 합법성으로 인해 C# 코드는 변경 및 구현할 수 없습니다.저장 프로 시저 오류를 기록하는 방법

Q : 저장 프로 시저의 실제 SQL 오류를 로그 파일이나 다른 테이블에 저장하는 방법은 무엇입니까? @@ Error는 앱에 오류 메시지를 반환하지만 쿼리 분석기에서 평가할 때 'If @@ Error <> 0'이 실행되지만 항상 0입니다. @@ 오류 번호는 저장하려고 시도하지만 항상 0입니다.

도와주세요.

답변

5

@@ERROR에서 확인할 수 있습니다. 왜? 실행 된 마지막 명령문의 상태를 반영하기 때문입니다.

IF @@ERROR <> 0 ... 

성명이며, 그 문장은 다음과 같이 조사하고있다 @@ERROR 값 조작 0

적절한 방법으로 설정 될 @@ERROR 일으키는 성공 :

DECLARE @ErrorCode INT 

INSERT INTO Table ... 

SET @ErrorCode = @@ERROR 
IF @ErrorCode <> 0 
BEGIN 
    INSERT INTO ErrorLog (ErrorCode, Message) 
     VALUES (@ErrorCode, 'The INSERT operation failed.') 
END 
1

하셨습니까을 직접 해보지 마십시오. SQL Server 프로파일 러을 사용하여 오류를 모니터링 할 수 있습니다.

1
ALTER PROCEDURE [dbo].[StoreProcedureName] 
(
parameters 
) 
AS 
BEGIN 
    SET NOCOUNT On 
    BEGIN TRY    
     --type your query 

    End Try 
    BEGIN CATCH 
     SELECT 
       ERROR_NUMBER() AS ErrorNumber, 
       ERROR_SEVERITY() AS ErrorSeverity, 
       ERROR_STATE() AS ErrorState, 
       ERROR_PROCEDURE() AS ErrorProcedure, 
       ERROR_LINE() AS ErrorLine, 
       ERROR_MESSAGE() AS ErrorMessage 
      RETURN -1 
    END CATCH 
End