Alex Kuznetsov có một chương tuyệt vời trong cuốn sách Lập trình cơ sở dữ liệu phòng thủ (Chương 8) bao gồm các cài đặt T-SQL TRY ... CATCH, giao dịch T-SQL & SET XACT_ABORT và sử dụng xử lý lỗi phía máy khách. Nó sẽ giúp bạn rất nhiều trong việc quyết định lựa chọn nào có ý nghĩa nhất cho những gì bạn cần phải hoàn thành.
Nó có sẵn miễn phí tại trang web này . Tôi không có cách nào liên kết với công ty, nhưng tôi sở hữu phiên bản sao chép cứng của cuốn sách đó.
Có rất nhiều chi tiết nhỏ về chủ đề này được Alex giải thích rất rõ.
Theo yêu cầu của Nick ... (nhưng không phải tất cả những điều này đều có trong chương này)
Về quy mô, bạn cần trung thực một cách thô bạo về những hoạt động nào cần có trong mã db và hoạt động nào phải có trong ứng dụng. Bạn có bao giờ nhận thấy làm thế nào mã thực thi nhanh có xu hướng quay trở lại thiết kế cho một mối quan tâm duy nhất cho mỗi phương thức?
Cách dễ nhất để giao tiếp là mã lỗi tùy chỉnh (> 50.000). Nó cũng khá nhanh. Điều đó có nghĩa là bạn phải giữ đồng bộ mã db và mã ứng dụng. Với mã lỗi tùy chỉnh, bạn cũng có thể trả về thông tin hữu ích trong chuỗi thông báo lỗi. Vì bạn có mã lỗi nghiêm ngặt cho tình huống đó, bạn có thể viết trình phân tích cú pháp trong mã ứng dụng được điều chỉnh theo định dạng dữ liệu của lỗi.
Ngoài ra, những điều kiện lỗi cần thử lại logic trong cơ sở dữ liệu? Nếu bạn muốn thử lại sau X giây, thì tốt hơn hết bạn nên xử lý trong mã ứng dụng để giao dịch không bị chặn nhiều như vậy. Nếu bạn chỉ gửi lại một hoạt động DML ngay lập tức, việc lặp lại nó trong SP có thể hiệu quả hơn. Tuy nhiên, hãy nhớ rằng bạn sẽ phải sao chép mã hoặc thêm một lớp SP để thực hiện thử lại.
Thực sự, đó là nỗi đau lớn nhất với TRY ... logic CATCH trong SQL Server tại thời điểm này. Nó có thể được thực hiện, nhưng đó là một chút của một oaf. Tìm kiếm một số cải tiến đến với điều này trong SQL Server 2012, đặc biệt là ném lại các ngoại lệ của hệ thống (giữ nguyên số lỗi ban đầu). Ngoài ra, có FORMATMESSAGE , bổ sung một số tính linh hoạt trong việc xây dựng các thông báo lỗi, đặc biệt là cho mục đích ghi nhật ký.