Thứ Bảy, 14 tháng 5, 2011

Try... Catch trong sql server 2005

Từ sql 2005 mới hỗ trợ Try...Catch này. Thay vì cứ luôn phải check biến error của sql lúc thực hiện lệnh transactions thì bây giờ ta thực hiện để các chuỗi lệnh trong Try...Catch. Nếu lỗi thì ta RollBack lại. Đây là lợi thế mới trong sql 2005 hỗ trợ người dùng code câu lệnh sql.


Sau đây là ví dụ rất đơn giản và dễ hiểu
CREATE PROCEDURE [dbo].[EMS_COURSEINFOR_INSERT]
(
@COURSE_NAME NVARCHAR(100),
@PERIODYEAR float,
@STARTDATE DATETIME = NULL,
@ENDDATE DATETIME = NULL,
@DESCRIPTION NVARCHAR(200),

--@COURSE_ID INT,
@EDULEVEL_ID INT,
@EDUSYS_ID INT,
@CM_ID INT,
@FACULTY_ID INT,
@FP_ID INT
)
AS
--THỰC HIỆN BẮT LỖI
DECLARE @CHK INT
BEGIN TRY
BEGIN TRANSACTION INSERT_COURSEINFOR;--KHỞI ĐỘNG 1 TRANSACTION
INSERT INTO COURSEINFOR (COURSE_NAME,PERIODYEAR,STARTDATE,ENDDATE,DESCRIPTION)
VALUES
(@COURSE_NAME,@PERIODYEAR,@STARTDATE,@ENDDATE,@DESCRIPTION)

DECLARE @COURSE_ID INT
SELECT @COURSE_ID = MAX(COURSE_ID) FROM COURSEINFOR
INSERT INTO COURSES (COURSE_ID,EDULEVEL_ID,EDUSYS_ID,CM_ID,FACULTY_ID,FP_ID)
VALUES
(@COURSE_ID,@EDULEVEL_ID,@EDUSYS_ID,@CM_ID,@FACULTY_ID,@FP_ID)
COMMIT TRANSACTION INSERT_COURSEINFOR; --HOÀN THÀNH GIAO DỊCH
SET @CHK = 1 --THÀNH CÔNG
SELECT @CHK
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION INSERT_COURSEINFOR; --THU HỒI 1 TRANSACTION
SET @CHK = 0 --KHÔNG THÀNH CÔNG
SELECT @CHK
END CATCH
RETURN

Thực hiện Copy và paste vào trong Query của sql sẽ hiện lên dễ nhìn hơn.
Thủ tục trên INSERT dữ liệu vào bảng quá trình INSERT vào csdl bị lỗi nó sẽ nhảy sang CATCH, và thực hiện quá trình ROLLBACK (thu hồi) câu lệnh trên.

1 nhận xét:

  1. viết vậy khó đọc quá , cho cái vidu bắt lỗi đơn giản như chèn dữ liệu

    Trả lờiXóa