Tôi đã thừa hưởng mã mà trông như thế này:Hiệu suất TSQL với @@ Lỗi và chúng có thể được thay thế không?
Stored Procedure UpdateSomeStuff
Update Table1 Set [email protected]
IF @@Error > 0 Goto ERR
Update Table2 Set [email protected]
IF @@Error > 0 Goto ERR
RETURN 0
ERR:
return -1;
sp này được gọi bằng ADO.NET trong C# như thế này
try
{
myCommand.ExecuteNonQuery();
}
catch (System.Exception ex)
{
_log.Error(ex);
throw();
}
finally
{
if(myConnection!=null)
{
myConnection.Close();
}
}
Tôi chỉ hỏi Bản thân mình: Có phải là phần NẾU @@ Lỗi> 0 Goto ERR có phù hợp với mọi thứ không? Nếu một lỗi xảy ra, sp sẽ trả về và một ngoại lệ sẽ bị bắt trong phương thức gọi.
Mã gọi không xử lý giá trị trả về 0 và -1. Kế hoạch của tôi sẽ loại bỏ tất cả Errorhandling trong thủ tục lưu trữ một kết quả tương tự. Tôi có đúng hay có điều gì đó tôi đã bỏ lỡ không?
Không, nếu có lỗi, các câu lệnh còn lại của SP sẽ vẫn thực thi. Nếu ý định là KHÔNG tiếp tục thực hiện T-SQL còn lại, bạn phải giữ cho kiểm tra lỗi được thực hiện. Nhưng tôi ngạc nhiên là không có giao dịch nào liên quan đến SP gốc. – HardCode