2014-04-09 3 views
1

SQL Management Studio에서 호출 할 때 예상되는 결과를 생성하는 SQL 저장 프로 시저를 만들었습니다. 하나의 출력 매개 변수는 proc 파일이 실패한 위치를 알려주는 메시지입니다 . 여기 내 저장 프로 시저의 맨 아래에있는 시저저장된 프로 시저의 텍스트 출력

CREATE PROCEDURE [dbo].[uspProgramUpdate] 
    @EmailFailMessage VARCHAR(100) OUTPUT 

의 상단 부분은 내가 변수의 값을 설정하는 곳입니다 :

BEGIN CATCH 
    ROLLBACK TRAN [CoS1] 
    RAISERROR ('***An error occurred during processing, all transactions have been rolled back. Correct the error and restart this process.***', 16, 1) 
    SET @EmailFailMessage = '***An error occurred during processing, all transactions have been rolled back. Correct the error and restart this process.***' 
END CATCH 

내가 뭘하려고 ('내가 할 수있는 그 내가 알아 낸 점은 EmailFailMessage 텍스트를 캡처하여 SSIS 내 이메일에서 해당 텍스트를 사용할 수있는 방법입니다.

SQL Server에서 저장 프로 시저를 성공적으로 실행하는 SSIS에서 SQL 실행 작업을 만들었습니다. 나는 성공적으로 RAISERROR 이벤트를 캡처 한 내가 SSIS 패키지를 실행할 때 나는 비주얼 스튜디오 창에서 출력 창에 그것을 볼 수 있습니다

Error: 0xC002F210 at Execute SQL - run uspProgramUpdate, Execute SQL Task: Executing the query "EXEC uspProgramUpdate ?" failed with the following error: "***An error occurred during processing, all transactions have been rolled back. Correct the error and restart this process.***". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly. 
Task failed: Execute SQL - run uspProgramUpdate 

SSIS 작업의의 SQLStatement 속성은 다음과 같습니다

EXEC uspCoSSleepProgramUpdate ? OUTPUT 

을 나는 다음과 같은 SSIS 변수가 있습니다

User::EmailFailMessage (string), value = asdf 

을 다음과 같이 매개 변수는 매개 변수 매핑에서 SSIS SQL 작업에 매핑됩니다 :

Variable Name| Direction | Data Type | Parameter Name | Parameter Size 
User::EmailFailMessage | Output | VARCHAR | @EmailFailMessage | -1 

나는 호출되는 이메일 작업을하고 이메일 작업을 위해 내가 설정 한 :

MessageSource = @[User::EmailFailMessage] 

나는 SSIS 패키지를 실행하고 이메일의 이메일, 메시지 (몸을)받을 때 저장된 proc을 실행 한 후 SQL로부터 메시지를받지 못합니다. 그것은 User :: EmailFailMessage 변수에 대해 설정된 초기 값을 가지고 있으며 변경을 기대하고 있습니다 만, 그렇지 않습니다.

다른 것들 중에서도 SQL 실행 태스크의 매개 변수 매핑 영역에있는 매개 변수 이름에 0을 사용했습니다. 그걸 사용해도 결과는 바뀌지 않습니다.

답변

1

개인적으로 User : dataFlowExceptionMessage라는 오류 이벤트 핸들러에서 사용할 수있는 오류 메시지 변수를 사용합니다. 그러면 실패한 작업에서 보낸 정확한 오류 메시지가 전송됩니다. 그것은 raiserror에서 위로 거품이 일 것입니다. 롤백이 발생한 이유를 쉽게 알 수 있도록 오류 메시지의 일부로 실제 오류 메시지를 사용하는 것이 좋습니다. 나는 일반적으로 정확한 오류를 알고 싶다.

또 다른 작업은 오류를 테이블 변수에 넣은 다음 롤백 후 날짜와 proc 이름이있는 예외 테이블에 삽입하는 것입니다. 테이블 변수는 롤백으로 범위를 유지합니다. 그런 다음 해당 테이블을보고 전자 메일 작업에 대한 메시지를 가져올 수 있으며 실패한 정보와 문제 해결에 유용한시기 및 빈도를 정확하게 기록 할 수 있습니다.

+0

User :: dataFlowExceptionMessage 변수를 사용하여 오류 메시지를 캡처하는 방법을 모르지만 System :: ErrorDescription (VS 2008)에 오류 메시지가 있습니다. 해당 변수에서 변수를 가져 와서 전자 메일 등에 연결할 수 있습니다. – nanonerd

관련 문제