ข้ามไปที่เนื้อหาหลัก

[SQL SERVER] ใช้งาน TRY…CATCH ทำงานคู่กับ Transacton เพื่อยืนยันการทำรายการ


     หลายๆคน อาจรู้จักคำสั่ง
Try … Catch ในภาษาอื่นๆมาบ้าง
วันนี้ลองมาดู
Try … Catch ใน SQL SERVER (
Transact-SQL) กัน
เพราะงานบางครั้งจำเป็นจะต้องมีการตรวจสอบการทำงานของคำสั่งว่าถูกต้องหรือไม่

หรือเมื่อมีความผิดพลาดเกิดขึ้นกับการทำงานของคำสั่ง จะทำอย่างไรต่อไป
           บทความนี้จะเสนอแนวทางว่าถ้าเรานำมาช่วยในการตรวจสอบความผิดพลาด
ในกรณีการทำงานกับ ข้อมูล
Transaction นั้น สามารถทำได้อย่างไร >>>


Red Code = คำสั่งเพิ่มเติมที่ใช้ดึงค่าการทำงานของ TRANSACTION ขณะนั้น
Blue Bold Code = คำสั่ง Try … Catch ในบทความนี้
Light Green Code = Comment หรือคำอธิบายคำสั่ง ขั้นตอนนั้นๆ เพื่อความเข้าใจมากขึ้น

**********************************************************************
ตัวอย่างคำสั่ง :::


--สร้างตารางข้อมูลชั่วคราวขึ้นมาเพื่อใช้ทำการทดสอบ
Create table #TTB_Test (ProductID varchar(20));

insert into #TTB_Test values ('777');
insert into #TTB_Test Values ('888');

select ProductID from #TTB_Test ; --ข้อมูลทีได้ก่อนเริ่มทดสอบ


BEGIN TRANSACTION;

BEGIN TRY
    -- ลบข้อมูลที่ไม่มีอยู่จริง (ต้องการทำให้ Error เพื่อตรวจสอบการทำงานของ Catch)
    DELETE FROM Production.Product
    WHERE ProductID = 980/0;
END TRY
BEGIN CATCH
    SELECT  --ทำการ Select ERROR
        ERROR_NUMBER() AS ErrorNumber
        ,ERROR_SEVERITY() AS ErrorSeverity
        ,ERROR_STATE() AS ErrorState
        ,ERROR_PROCEDURE() AS ErrorProcedure
        ,ERROR_LINE() AS ErrorLine
        ,ERROR_MESSAGE() AS ErrorMessage;

    IF @@TRANCOUNT > 0  --เช็ค ถ้ามีการพบ TRANSACTION  ใน Catch (มี Errorเกิดขึ้น)
        ROLLBACK TRANSACTION; -- ยกเลิกและคืนค่าการทำงานกับ TRANSACTION นี้ซะ
END CATCH;

IF @@TRANCOUNT > 0  --เช็ค ถ้ามีการพบ TRANSACTION  ปกติ ก็ให้ยืนยันการทำรายการ
    COMMIT TRANSACTION;


select ProductID from #TTB_Test; --ข้อมูลทีได้หลังเริ่มทดสอบ

drop table #TTB_Test; --ลบตารางข้อมูลชั่วคราวที่ใช้ทดสอบ

GO

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

เชื่อมเหล็กฉุกเฉิน ใช้แค่แบต2ลูกกับสายพ่วงแบต และเหล็กเชื่อม

เอามาฝากครับ จากเว็บท่องไพรนะครับ น่าสนใจดี เผื่อฉุกเฉิน ใครจะคิดบ้างว่า "แบตเตอรี่รถยนต์" จะมีประโยชน์ใช้สอยที่มากกว่าการเป็นแหล่งเก็บพลังงานไฟฟ้าและต้นกำเนิด ไฟฟ้าที่ไว้ใช้ในรถยนต์ วันนี้อยากจะขอนำเสนอความอเนกประสงค์ของแบตเตอรี่อีกรูปแบบหนึ่งในการนำมา ประ ยุกต์ใช้เป็นเครื่องเชื่อมไฟฟ้า เผื่อยามว่างอยากจะซ่อมเชื่อมเครื่องใช้ในภายในบ้าน หรือกับการซ่อมแซมรถก็สามา- รถ ทำได้ด้วยตนเอง 1. พระเอกของฉบับนี้ แบตเตอรี่อย่างน้อย 2 ลูก สำหรับ เป็นแหล่งกำเนิดกระแสไฟ    2. สายพ่วงแบตเตอรี่ อันนี้อาจหาหยิบยืมเพื่อน บ้านมาใช้ก่อนก็ได้ (ใช้เสร็จแล้วอย่าลืมคืน) ควรมีสัก 3 เส้น สำหรับการใช้ทำเครื่องเชื่อมเหล็ก     3. อันนี้เพื่อการจำ ไม่ให้สับสนเกี่ยวกับขั้วของแบตเตอรี่ ตามหลักสากลแล้วสายไฟของขั้วลบ หรือสายกราวนด์ จะใช้สีดำแทนขั้ว ทั้งนี้ เพื่อป้องกันการสับสน ส่วนสายสีอื่นให้ใช้แทนขั้วบวกได้ จะได้ไม่สับสน 4. อันนี้เขาเรียกว่าลวดเชื่อมแบบไฟฟ้า ลักษณะคล้ายธูป ที่เราใช้ไหว้พระ ข้อแตกต่างระหว่างลวดเชื่อม แบบใช้ แก๊สและไฟฟ้าคือ ลวดเชื่อมแบบใช้แก๊สจะเป็นลวดโลหะ ที่ไม่มีการเคลื...

[SQL SERVER] ตัด 0 นำหน้าในตัวแปร Varchar

ตัด 0 นำหน้าในตัวแปร Varchar ผมได้เจอปัญหาว่าบางครั้งการแปลงข้อมูลตัวเลขเช่นเดือน Month = ‘02’ เมื่อต้องการเอามาใช้งานหรือเข้าสูตรต่อ โดยให้ Type Varchar เช่นเดิมนั้นเกิดปัญหา เพราะแหล่งข้อมูลที่เข้ามามีทั้ง ‘04’ และ ‘4’ ไปเจอที่ http://blog.sqlauthority.com/ 2012/11/19/ sql-server-removing-leading-zeros-from-column-in-table/ ของตาพิเนา....ตามนี้ ******************************************************** Code:             SUBSTRING ( ชื่อ Cloumn ,   PATINDEX ( '%[^0 ]%' ,   ชื่อ Cloumn +   ' ' ),   LEN ( ชื่อ Cloumn )) ******************************************************** ตัวอย่าง : USE   tempdb GO -- Create sample table CREATE TABLE   Table1   ( Col1   VARCHAR ( 100 )) INSERT INTO   Table1   ( Col1 ) SELECT   '0001' UNION   ALL SELECT   '000100' UNION   ALL SELECT   '100100' UNION   ALL SELECT   '000 0001' ...