2012-06-09 46 views
11

Tôi chưa bao giờ hiểu giao dịch lồng nhau là gì. Cam kết giao dịch lồng nhau cam kết không có gì - nó chỉ giảm @@TRANCOUNT. Và ROLLBACK hoàn nguyên mọi thứ.Mục đích của các giao dịch lồng nhau

BEGIN TRANSACTION 
    //do an update 
    BEGIN TRANSACTION 
    //do an insert 
    COMMIT TRANSACTION 
COMMIT TRANSACTION 

sự khác biệt với điều này là gì:

BEGIN TRANSACTION 
    //do an update 
    //do an insert 
COMMIT TRANSACTION 

Xin vui lòng cho tôi một ví dụ tại sao giao dịch lồng nhau nên được sử dụng và làm thế nào họ làm cho một sự khác biệt.

Kính trọng, Petar

Trả lời

8

giao dịch lồng nhau cho phép mã của bạn để gọi mã khác (SPs ví dụ) trong đó sử dụng các giao dịch tự mà không thực sự cam kết giao dịch của bạn khi họ cam kết.

Điều đó nói rằng, bạn có thể sử dụng các điểm an toàn để quay trở lại bên trong giao dịch.

Có một số CodeProject article dành riêng cho điều đó.

+0

Tôi có thể sử dụng các điểm truy cập an toàn mà không sử dụng các giao dịch lồng nhau. Các thủ tục lưu trữ là một điểm tốt (tôi chưa bao giờ nghĩ về điều đó). Nhưng nếu tôi không sử dụng một thủ tục được lưu trữ trong giao dịch của tôi (hoặc không gọi mã khác), tại sao tôi cần các giao dịch lồng nhau? Tôi liên tục thấy các ví dụ với các giao dịch lồng nhau và tôi không thấy điểm của chúng. –

+0

Vì vậy, các giao dịch lồng nhau chỉ hữu ích khi gọi mã giao dịch bên ngoài? –

+1

Tôi đồng ý với bạn và tôi nghĩ rằng chúng hữu ích khi gọi mã giao dịch bên ngoài. Khả năng kỹ thuật của SQL Server để xử lý các giao dịch lồng nhau là quan trọng và không có sẵn trong tất cả các hệ thống DB. Có một số trường hợp (chẳng hạn như với các SP đã đề cập - nơi bạn cũng nên sử dụng ['SET XACT_ABORT ON'] (http://stackoverflow.com/questions/1150032/what-is-the-benefit-of-using-set -xact-abort-on-in-a-được lưu trữ-thủ tục)), nơi họ có thể làm tổ "tự nhiên". Tôi không bao giờ sử dụng giao dịch lồng nhau rõ ràng. – Lucero

0

NẾU bạn đang gặp phải tình huống trong đó bạn gọi một SP có chứa một cuộc gọi SP khác trong đó. và SP bên trong đó cũng có thể được gọi độc lập từ ứng dụng của bạn. Trong trường hợp đó, nó cần thiết để đặt giao dịch bên trong (trên SP bên trong) cũng như trên SP cha.

Các vấn đề liên quan