2009-08-13 40 views
9

Tôi đã phân loại ra các điều giao dịch lồng nhau cả trong SQL server, và tôi đã lấp lánh những cốm hiểu biết về hành vi của lồng nhau xuyên:SQL Server 2005: Tại sao giao dịch tên?

  • Khi làm tổ giao dịch, chỉ có ngoài cùng cam kết sẽ thực sự cam kết.
  • "Cam kết Trans txn_name", khi lồng nhau , sẽ luôn áp dụng cho giao dịch trong cùng, ngay cả khi txn_name đề cập đến cho giao dịch bên ngoài.
  • "ROLLBACK TRAN" (không có tên), ngay cả trong giao dịch bên trong, sẽ rollback tất cả giao dịch.
  • "ROLLBACK TRAN txn_name" - txn_name phải tham chiếu đến tên txn ngoài cùng. Nếu không, nó sẽ thất bại.

Với những điều này, có lợi ích gì trong việc đặt tên giao dịch không? Bạn không thể sử dụng nó để nhắm mục tiêu một tranasction cụ thể, hoặc cho cam kết hoặc rollback. Chỉ dành cho mục đích nhận xét mã?

Cảm ơn,

Yoni

+0

Một lý do nữa, không đáng để trả lời IMO, là [ở đây] (http://www.sqlskills.com/blogs/paul/code-to-show-rolled-back-transactions-after-a-crash/). –

Trả lời

2

Bạn có thể có các thủ tục rollback chỉ công việc của mình về lỗi, cho phép người gọi để quyết định thời tiết từ bỏ toàn bộ giao dịch hoặc thu hồi và thử một con đường thay thế. Xem Exception handling and nested transactions để biết mẫu thủ tục cho phép hành vi nguyên tử này.

+1

Thật sao? Nhưng tài liệu nói rằng bạn không thể quay trở lại một giao dịch lồng nhau bên trong, bạn chỉ có thể quay trở lại giao dịch ngoài cùng. Tôi không tranh cãi bạn bởi vì tôi đã không thử nó, tôi chỉ tò mò đó là cách nó thực sự hoạt động. –

+1

Bạn có thể quay trở lại một điểm lưu. Tôi nghĩ đó không giống như một giao dịch được đặt tên, nhưng tôi nghĩ đó là những gì bạn đang thực sự sau. –

+1

Remus - Điểm tốt về điểm lưu. Nếu không, (Nếu không sử dụng Save Points, hiện tại tôi không có), không có lợi ích gì? – user144133

0

Ý tưởng là cuộn lại một phần công việc của bạn, như giao dịch lồng nhau. Không phải lúc nào cũng hoạt động như dự định. thủ tục lưu trữ sử dụng xử lý lỗi kiểu cũ và savepoints có thể không hoạt động như mong đợi khi chúng được sử dụng cùng với các khối try ... catch: Avoid mixing old and new styles of error handling.

Đã thảo luận ở đây @@ERROR and/or TRY - CATCH

+0

Nhưng nó không quay trở lại một phần công việc của bạn. Các giao dịch lồng nhau chỉ tăng lên @@ TRANCOUNT. Quay trở lại một giao dịch lồng nhau cuộn lại toàn bộ điều. Trừ khi bạn đang nói về lưu điểm. –

6

hiệu quả nó chỉ là một biên bản ghi các lập trình viên phụ tá. Nếu bạn đang đối phó với một Tx có một số giao dịch bên trong, cho mỗi tên có ý nghĩa có thể giúp bạn đảm bảo rằng các giao dịch được lồng vào nhau một cách thích hợp và có thể bắt lỗi logic.

+2

+1 cho 'ghi nhớ trợ lý' –

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