2015-01-28 2 views
0

다음 SQL Server 저장 프로 시저가 있습니다. 문제는 다음과 같습니다. log_db_error 테이블에 레코드가 있으면 제대로 작동하지만 테이블이 비어 있으면 @@ERROR이 오류를 나타냅니다. 어떤 방식 으로든이를 해결할 수 있습니까? 미리 감사드립니다.SQL Server : 빈 테이블에서 선택시 @@ 오류

CREATE PROCEDURE [dbo].[Log_DB_Error_Get_All] 
    @rownum_min int, 
    @rownum_max int 
AS 
BEGIN 
    SET NOCOUNT ON; 

    WITH ORDERED_LIST AS 
    (
     SELECT 
      ROW_NUMBER() OVER(ORDER BY el.created_on) AS ROWNUM, 
      el.log_db_error_id, 
      el.[error_function], 
      el.[error_message], 
      el.[error_severity], 
      el.[error_state], 
      el.created_on, 
      el.created_by 
     FROM 
      log_db_error el 
    ) 
    SELECT * 
    FROM ORDERED_LIST 
    WHERE ROWNUM BETWEEN @rownum_min AND @rownum_max; 

    IF(@@ERROR <> 0) 
    BEGIN 
     GOTO Handle_Error 
    END 

    -- execution jumps here when (@@ERROR > 0), i.e. error happens 
    Handle_Error: 
     DECLARE @ERROR_MESSAGE NVARCHAR(4000); 
     DECLARE @ERROR_SEVERITY INT; 
     DECLARE @ERROR_STATE INT; 
     DECLARE @ERROR_DATE  DATETIME; 
     DECLARE @ERROR_FUNCTION NVARCHAR(100); 
     DECLARE @ERROR_CREATED_BY BIGINT; 

     SELECT 
      @ERROR_MESSAGE = ERROR_MESSAGE(), 
      @ERROR_SEVERITY = ERROR_SEVERITY(), 
      @ERROR_STATE = ERROR_STATE(), 
      @ERROR_DATE = SYSDATETIME(), 
      @ERROR_CREATED_BY = null; 

     SET @ERROR_FUNCTION = OBJECT_SCHEMA_NAME(@@PROCID) + '.' + OBJECT_NAME(@@PROCID); 

     --store error details to a log table 
     exec dbo.Log_DB_Error_Insert @ERROR_FUNCTION, @ERROR_MESSAGE, @ERROR_SEVERITY, @ERROR_STATE, @ERROR_DATE, @ERROR_CREATED_BY 
END 
+3

생성되는 오류는 무엇입니까? –

+0

나는 당신이 전체 script.Also를 표시하지 않는 것 같아요 @ @ 오류 메시지를 테이블에서 제공해야합니다. – KumarHarsh

답변

0

무엇보다 @@ Error는 무엇을 이해해야합니까?

@@ 오류는 마지막 Transact-SQL 문을 실행 한 오류 번호를 표시합니다.

귀하의 마지막 T-SQL 문

은 오류가없는, 그래서 나는이 문장에 오류가 표시되지

SELECT * 
    FROM ORDERED_LIST 
    WHERE ROWNUM BETWEEN @rownum_min AND @rownum_max; 

입니다. 그리고 If 문 때문에 빈 테이블이 생깁니다.