8

Tôi đã thấy việc sử dụng giao dịch trong một số trường hợp nhưng chưa bao giờ thực sự hiểu được tình huống nào nên được sử dụng. Làm thế nào và khi giao dịch nên được sử dụng (bắt đầu tuyên bố giao dịch)? Tôi đã đọc rằng Microsoft không đề nghị sử dụng các lệnh giao dịch (cam kết, rollback) bên trong một trigger và thủ tục lưu sẵn.Cách sử dụng giao dịch (bắt đầu giao dịch, giao dịch cam kết)?

Trả lời

5

Giao dịch có thể được sử dụng kết hợp với xử lý lỗi trong các thủ tục được lưu trữ hoặc tập lệnh SQL khi chèn hoặc thao tác dữ liệu để đảm bảo mọi thứ đều nhất quán.

Ví dụ: nếu bạn có thủ tục được lưu trữ chèn bản ghi vào bảng cha và bảng con, bạn sẽ muốn đảm bảo rằng bản ghi gốc được chèn đầu tiên; nếu không thành công, bạn có thể khôi phục các thay đổi của mình để không có hồ sơ con mồ côi.

Erland Sommarskog có great article về cách sử dụng xử lý lỗi trong SQL Server.

Cuối cùng, nơi Microsoft đề nghị không sử dụng giao dịch trong các thủ tục được lưu trữ? Tôi nghĩ rằng các thủ tục lưu trữ sẽ là một nơi lý tưởng để sử dụng chúng.

+0

Cảm ơn, có lẽ tuyên bố của tôi về quá thẳng: có một cảnh báo rằng việc sử dụng cam kết hoặc rollback bên trong một thủ tục hoặc kích hoạt có thể gây ra lỗi: http://msdn.microsoft.com /en-us/library/ms187844(v=SQL.100).aspx – juur

2

Nếu tôi được chuyển moey từ một tài khoản khác, tôi muốn nó được 100% thành công hay thất bại 100%:

UPDATE PersonalAccount SET Balance = Balance - 100 WHERE Username = 'gbn' 
--what if the server caught fire here? 
UPDATE SavingsAccount SET Balance = Balance + 100 WHERE Username = 'gbn' 

Đối với những gì bạn đọc, hoàn rác trừ không cần phải sử dụng BẮT ĐẦU TRÊN.

Một ví dụ từ "Nested stored procedures containing TRY CATCH ROLLBACK pattern?"