SQL 2012 New Feature - Throw

SQL2012 새로운 기능 중 하나인 에러 예외 처리가 아닌가 싶다.  그동안 catch 구문에서 에러를 받아서 어플리케이션에 에러 정보를 전달하고자 할때 얼마나 불편했는가~ 그동안 RAISERROR를 이용하여 에러 정보를 반환했었는데 앞으로 그럴필요가 없어졌다.


SET NOCOUNT ON

-- # 1. RAISERROR 예외 발생시킬 때
BEGIN TRY  
 SELECT 1/0  
END TRY  
BEGIN CATCH  
    DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int 
    SELECT @ErrMsg = ERROR_MESSAGE(),  
        @ErrSeverity = ERROR_SEVERITY()  
   
    RAISERROR(@ErrMsg, @ErrSeverity, 1)  
END CATCH  
GO  

--메시지 50000, 수준 16, 상태 1, 줄 10
--0으로 나누기 오류가 발생했습니다.


-- # 2. THROW 파라메터가 없는 경우
BEGIN TRY  
 SELECT 1/0  
END TRY  
BEGIN CATCH  
    DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int 
    SELECT @ErrMsg = ERROR_MESSAGE(),  
        @ErrSeverity = ERROR_SEVERITY();  
   
    THROW
END CATCH  
GO  

--메시지 8134, 수준 16, 상태 1, 줄 8
--0으로 나누기 오류가 발생했습니다.

-- # 3. THROW 파라메터가 있는 경우
BEGIN TRY  
 SELECT 1/0  
END TRY  
BEGIN CATCH  
     THROW 51000, '내가 정의한 에러양', 1;  
END CATCH  
GO 

--메시지 51000, 수준 16, 상태 1, 줄 6
--내가 정의한 에러양


-- # 4. TRY문 안에 예외 처리
BEGIN TRY  
	THROW 51000, '나 에러야...', 1;  
 SELECT 1/0  
END TRY  
BEGIN CATCH  
     THROW;  
END CATCH  
GO 

--메시지 51000, 수준 16, 상태 1, 줄 2
--나 에러야...