2010-03-23 4 views
3

연결된 서버에서 저장 프로 시저를 실행할 때 발생하는 SQL 오류를 잡으려고합니다. 내가 직접에 저장 프로 시저를 실행하면SQL Server 2005에서 연결된 서버가있는 CATY가 작동하지 않음

RAISERROR('An error', 16, 1); 

: 두 서버는 나는 다음과 같은 코드를 실행 올리기 오류라는 연결된 서버에 저장 프로 시저를 생성 한 문제를 증명하기 위해 SQL 서버를 2005

를 실행 예상대로 내가 '오류'를 설정 한 결과를 얻을 다음 코드를 사용하여 연결된 서버, '16'은 (즉 코드는 catch 블록을 입력) :

BEGIN TRY 
EXEC [dbo].[RaiseError]; 
END TRY 
BEGIN CATCH 
    DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int; 
    SELECT @ErrMsg = ERROR_MESSAGE(), @ErrSeverity = ERROR_SEVERITY(); 
    SELECT @ErrMsg, @ErrSeverity; 
END CATCH 

내 로컬 서버에서 다음 코드를 실행하면 연결된 서버에서 저장 프로 시저를 실행하려면 SSMS는 링크 된 경우

BEGIN TRY 
    EXEC [Server].[Catalog].[dbo].RaiseError 
END TRY 
BEGIN CATCH 
    DECLARE @SPErrMsg nvarchar(4000), @SPErrSeverity int; 
    SELECT @SPErrMsg = ERROR_MESSAGE(), @SPErrSeverity = ERROR_SEVERITY(); 
    SELECT @SPErrMsg, @SPErrSeverity; 
END CATCH 

내 질문은 내가 발생하는 오류를 잡을 수있다 나에게 메시지 '쿼리 오류 완료', .MSG 50000, 수준 16, 상태 1, 프로 시저 RaiseError, 선 (13) 오류를 '제공 서버 저장 프로 시저가 실행됩니까?

미리 감사드립니다.

답변

4

Handling Errors in Server-to-Server Remote Stored Procedures를 참조하십시오

원격 저장 절차는 문이 원격 서버에 오류를 중단 원인이 내부에서 덜 심각 (20)에 비해 을 RAISERROR를 호출. A 로컬 에있는 TRY ... CATCH 구문은 원격 일괄 처리를 처리하지 않습니다. 오류 만 발생합니다. 원격 저장 절차하게는 20 저장 절차는 로컬 서버에 TRY 블록 내의 범위가 원격 보다 심각도 RAISERROR를 호출하면, RAISERROR는 TRY의 CATCH 블록 패스 제어를 일으키지 않는 ... CATCH 구조. 그러나 RAISERROR가 심각도가 20 이상인 원격 서버의 은 연결을 끊고 로컬 서버의 실행이 CATCH 블록으로 전달됩니다.

+0

사실. 기술 자료 http://msdn.microsoft.com/en-us/library/ms191515.aspx에서 설명합니다. sysadmin 역할 또는 ALTER TRACE 권한이있는 사용자가 필요하고 WITH LOG를 사용하여 20에서 25까지의 심각도로 오류를 발생시키지 않으므로 성가신니다. –

3

이 로컬 오류 정보를 반환

EXEC ('your.fullyqualified.storedprocname') AT YOUR_LINKED_SERVER; 
+0

이것은 내가 찾고있는 것입니다! 원격 연결된 서버 오류를 로컬로 반환하는 방법! AT << LINKED_SERVER_NAME >> >>과 같은 EXEC ('select * from orders')와 같은 SQL 문을 넣을 수도 있습니다. – Baodad