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ủ 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.
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