Sử dụng Transaction trong SQL Server

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