TRY & CATCH các lỗi!

Viết Hàm và Thủ Tục Lưu Trữ trong SQL Server

Meghan Kwartler

IT Consultant

Có nên xử lý lỗi không?

Xử lý lỗi là gì?

  • Dự đoán, phát hiện và khắc phục lỗi
  • Duy trì luồng thực thi bình thường
  • Tích hợp ngay từ thiết kế ban đầu

Nếu không xử lý lỗi thì sao?

  • Dừng đột ngột hoặc treo thực thi
  • Thông báo lỗi chung chung, thiếu ngữ cảnh hữu ích
Viết Hàm và Thủ Tục Lưu Trữ trong SQL Server

Hãy TRY

ALTER PROCEDURE dbo.cusp_TripSummaryCreate
  @TripDate nvarchar(30),
  @RideHrs numeric,

@ErrorMsg nvarchar(max) = null OUTPUT
AS BEGIN BEGIN TRY INSERT INTO TripSummary (Date, TripHours) VALUES (@TripDate, @RideHrs) END TRY ........
Viết Hàm và Thủ Tục Lưu Trữ trong SQL Server

Đến lúc CATCH

ALTER PROCEDURE dbo.cusp_TripSummaryCreate
  @TripDate nvarchar(30),
  @RideHrs numeric, 
  @ErrorMsg nvarchar(max) = null OUTPUT
AS
BEGIN
  BEGIN TRY
      INSERT INTO TripSummary (Date, TripHours)
      VALUES (@TripDate, @RideHrs)
  END TRY
  BEGIN CATCH
      SET @ErrorMsg = 'Error_Num: ' +
      CAST (ERROR_NUMBER() AS varchar) +
      ' Error_Sev: ' + 
      CAST(ERROR_SEVERITY() AS varchar) +  
      ' Error_Msg: ' + ERROR_MESSAGE()
  END CATCH
END
Viết Hàm và Thủ Tục Lưu Trữ trong SQL Server

Hiển thị ERROR...

DECLARE @ErrorMsgOut as nvarchar(max)

EXECUTE dbo.cusp_TripSummaryCreate 
        @TripDate = '1/32/2018',
        @RideHrs = 100,
        @ErrorMsg = @ErrorMsgOUT OUTPUT

SELECT @ErrorMsgOut as ErrorMessag
ErrorMessage
-------------------------------------------------
Error_Num: 241 Error_Sev: 16 
Error_Msg: Conversion failed when converting date and/or time from 
           character string
Viết Hàm và Thủ Tục Lưu Trữ trong SQL Server

THROW vs RAISERROR

THROW

  • Giới thiệu trong SQL Server 2012
  • Đơn giản, dễ dùng
  • Các lệnh sau sẽ KHÔNG chạy

RAISERROR

  • Giới thiệu trong SQL Server 7.0
  • Tạo lỗi mới và không truy cập được chi tiết lỗi gốc (ví dụ: số dòng nơi lỗi ban đầu xảy ra)
  • Các lệnh sau vẫn có thể chạy
Viết Hàm và Thủ Tục Lưu Trữ trong SQL Server

Đến lượt bạn CATCH!

Viết Hàm và Thủ Tục Lưu Trữ trong SQL Server

Preparing Video For Download...