Theo mặc định , khi bạn chạy một phát biểu INERT, UPDATE, hay DELETE , SQL Server luôn ghi lại những kết quả của phát biểu vào cơ sở dữ liệu . đây có thể không phải luôn luôn là kết quả mong muốn của bạn. thí dụ , trong trường hợp một giao dịch ngân hàng, bạn có thể muốn rút tiền từ một tài khoản và giửi sang một tài khoản khác. Nếu bạn có hai phát biểu UPDATE riêng biệt thực hiện việc rút và gởi, và bạn muốn thực hiện kết quả cho mỗi phát biểu UPDATE thường xuyên chỉ như một đơn vị. Nếu như sự cập nhật bị thất bại do một lí do nào đó, và bạn muốn huỷ những kết quả của cả hai phát biểu UPDATE này.
Chú thích: luôn luôn thực hiện việc ghi lại những kết quả của những phát biểu SQL được hiểu như là một cam kết, hay sự giao phó cho những câu lệnh SQL. Việc huỷ những kết quả của những câu lệnh SQL được hiểu như
một sự trả lại tình trạng cũ ( như khi chưa thực thi UPDATE).
Bạn có thể nhóm các câu lệnh SQL trong một trasaction. Và sau đó bạn có thể thực hiện hoặc quay trỏ lại những câu lệnh SQL trong transaction đó như một đơn vị. thí dụ , hai phát biểu trước trong thí dụ về ngân hàng có thểđược đặt vào trong một transaction , và rồi bạn có thể giao phó sự thực hiện hay quay ngược giao dic5ch này như một đơn vị,
Tuỳ thuộc vào hai phát biểu này có thành công hay không.
Bạn khởi chạy một giao dịch sử dụng phát biểu BEGIN TRANSASTION hay phiên bản tốc ký ,BEGIN TRAN. Sau đó bạn có thể thực hiện những phát biểu SQL đã tạo thành transaction này. Để giao phó sự thực thi cho
transaction bạn thực thi một phát biểu COMMIT TRANSACTION hoặc một trong số trong phiên bản tốc ký, COMMIT TRAN hoặc COMMIT. Để roll back một transaction ,bạn thực hiện một phát biểu ROLLBACK TRANSACTION hoặc một trong số những phiên bản tốc ký , ROLLBACK TRANS hay ROLLBACK.
Chú ý : theo mặc định , transaction là phục hồi (rollback) . bạn phải luôn luôn chỉđịnh rõ ràng commit hay roll back một transaction để cho biết bạn muốn làm gì.
Hãy xem một thí dụ , transaction dưới đây bao gồm hai phát biểu INSERT : phát biểu thứ nhất thêm một hàng vào bảng Customers, và phát biểu thứ hai thêm một hàng vào bảng Orders. Cuối cùng , giao dịch này được giao phó sử dụng phát biểu COMMIT :
BEGIN TRANSACTION; INSERT INTO Customers (
CustomerID, CompanyName
) VALUES (
'SOCOM', 'Steve Orange Company'
);
INSERT INTO Orders (
CustomerID
) VALUES (
'SOCOM'
);
COMMIT;
Hình 3.25 trình bày giao dịch này, theo sau với hai phát biểu SELECT trả về hai hàng mới INSERT
Transaction tiếp theo bao gồm phát biểu INSERT tương tự, ngoại trừ lúc này transaction là phục hồi sử dụng phát biểu
ROLLBACK.
BEGIN TRANSACTION; INSERT INTO Customers (
CustomerID, CompanyName
) VALUES (
'SYCOM', 'Steve Yellow Company'
);
INSERT INTO Orders (
CustomerID
'SYCOM' );
ROLLBACK;
Bởi vì transaction là phục hồi (rolled back) , hai hàng thêm vào bởi hai phát biểu INSERT được cuộn lui trở
lại( hủy).
Bạn nên kiểm tra lỗi của một transaction trước khi quyết định thực hiện một COMMIT hay ROLLBACK bởi vì những lỗi không phải luôn luôn đình chỉ việc thực thi hàng tiếp theo. Để làm điều này trong SQL Server, bạn sử dụng hàm @@ERROR. Hàmnày trả lại số khôngbất cứ khi nào một phát biểu được thự thi và không gây ra lỗi. nếu @@ERROR trả về một giá trị khác không, bạn biết đã sảy ra một lỗi. Nếu @@ERROR trả về 0, bạn thực hiện một COMMIT, ngược lại bạn thực hiện một ROLLBACK.
Bạn cũng có thể gán một tên cho transaction của bạn trong phát biểu BEGIN TRANSACTION. Điều này hữu ich như nó cho biết transaction nào bạn đang làm việc .
Thí dụ sau đây trình bày việc gán tên cho một transaction, cùng với sự sử dụng hàm @@ERROR để xác định nên thực hiện một COMMIT hay một ROLLBACK :
BEGIN TRANSACTION MyTransaction; INSERT INTO Customers (
CustomerID, CompanyName
) VALUES (
'SYCOM', 'Steve Yellow Company' );
INSERT INTO Orders (CustomerID ) VALUES (
'SYCOM'
); IF @@Error = 0
COMMIT TRANSACTION MyTransaction;
ELSE
ROLLBACK TRANSACTION MyTransaction;
Chú ý : tên của transaction là MyTransaction, và tên này được sử dụng trong phát biểu COMMIT và ROLLBACK.
Chú thích:bạn sử dụng phát biểu IF đểđịnh điều kiện thực thi một phát biểu (câu lệnh SQL). Bạn sẽ học nhiều hơn vềđiều này ở chương 4, "Introduction to Transact-SQL Programming."