TRY & CATCH กับการจัดการข้อผิดพลาด!

การเขียนฟังก์ชันและ Stored Procedures ใน SQL Server

Meghan Kwartler

IT Consultant

จัดการข้อผิดพลาดหรือไม่?

การจัดการข้อผิดพลาดคืออะไร?

  • การคาดการณ์ ตรวจจับ และแก้ไขข้อผิดพลาด
  • รักษาการทำงานให้ดำเนินต่อไปได้ตามปกติ
  • ออกแบบให้รองรับตั้งแต่ต้น

เกิดอะไรขึ้นถ้าไม่มีการจัดการข้อผิดพลาด?

  • โปรแกรมหยุดทำงานโดยไม่มีการแจ้งเตือน
  • แสดงข้อความแสดงข้อผิดพลาดทั่วไปที่ไม่มีบริบทที่เป็นประโยชน์
การเขียนฟังก์ชันและ Stored Procedures ใน SQL Server

มาลอง 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 ........
การเขียนฟังก์ชันและ Stored Procedures ใน SQL Server

ถึงเวลา 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
การเขียนฟังก์ชันและ Stored Procedures ใน SQL Server

ดูข้อผิดพลาดกัน...

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
การเขียนฟังก์ชันและ Stored Procedures ใน SQL Server

THROW กับ RAISERROR

THROW

  • เปิดตัวใน SQL Server 2012
  • ใช้งานง่ายและตรงไปตรงมา
  • คำสั่งที่ตามมาจะไม่ถูกรันต่อ

RAISERROR

  • เปิดตัวใน SQL Server 7.0
  • สร้างข้อผิดพลาดใหม่ และไม่สามารถเข้าถึงรายละเอียดของข้อผิดพลาดเดิมได้ (เช่น หมายเลขบรรทัดที่เกิดข้อผิดพลาด)
  • คำสั่งที่ตามมาสามารถรันต่อได้
การเขียนฟังก์ชันและ Stored Procedures ใน SQL Server

ถึงคิว CATCH ของคุณแล้ว!

การเขียนฟังก์ชันและ Stored Procedures ใน SQL Server

Preparing Video For Download...