Có 2 cách để kiểm soát Transaction trong SQL Server
Cách 1: bằng cách kiểm tra biến toàn cục @@ERROR để xác định nếu có lỗi xảy ra thì thực hiện rollback. Đây là cách cổ điển của SQL Server 2000. Điểm bất tiện của nó là sau mỗi câu lệnh SQL, ta phải thực hiện việc kiểm tra giá trị của biến này, để kịp thời rollback.
CREATE PROC For_TransTest
AS
BEGIN
BEGIN TRANSACTION updatestaff;
UPDATE aspnet.staff SET fk_department = 30
WHERE pk_staff = 971;
IF @@ERROR != 0 -- neu co loi xay ra, rollback
BEGIN
PRINT 'rollback ne';
ROLLBACK TRAN updatestaff;
END
UPDATE aspnet.staff SET fk_department = null
WHERE pk_staff = 971;
IF @@ERROR != 0 -- neu co loi xay ra, rollback
BEGIN
PRINT 'rollback ne';
ROLLBACK TRAN updatestaff;
END
ELSE
COMMIT TRANSACTION updatestaff;
END
Cách 2: Sử dụng lệnh TRY...CATCH, hỗ trợ trên SQL Sever 2005, rất đơn giản và dễ dùng
CREATE PROC For_TransTest
AS
BEGIN
BEGIN TRY
BEGIN TRANSACTION updatestaff;
UPDATE aspnet.staff SET fk_department = 30
WHERE pk_staff = 971;
UPDATE aspnet.staff SET fk_department = null
WHERE pk_staff = 971;
COMMIT TRANSACTION updatestaff;
PRINT 'commited';
END TRY
BEGIN CATCH
PRINT 'rollback ne';
ROLLBACK TRAN updatestaff;
END CATCH
END