Bạn có nghĩ rằng có cách nào tốt hơn để viết giao dịch trong t-sql không? Có cách tiếp cận nào tốt hơn để cải thiện khả năng bảo trì và hiệu suất của ứng dụng sử dụng giao dịch này không?viết một giao dịch trong t-sql và xử lý lỗi
-- Description: Insert email Receiver under specified subject
-- =============================================
ALTER PROCEDURE [Contact].[Receiver_stpInsert]
@First_Name nvarchar(30),
@Last_Name nvarchar(30),
@Email varchar(60),
@Subject_Id int
AS
BEGIN
SET NOCOUNT ON;
DECLARE @error_num int;
BEGIN TRANSACTION
INSERT INTO Contact.Receiver(First_Name, Last_Name, Email) VALUES(@First_Name, @Last_Name, @Email);
SET @error_num = @@ERROR;
IF (@error_num <> 0)
BEGIN
ROLLBACK;
RETURN;
END
DECLARE @rec_record_id int;
SET @rec_record_id = (SELECT Record_Id FROM Contact.Receiver WHERE Email = @Email);
SET @error_num = @@ERROR;
IF (@error_num <> 0)
BEGIN
ROLLBACK;
RETURN;
END
INSERT INTO Contact.Receiver_Subject(Receiver_Id, Subject_Id) VALUES(@rec_record_id, @Subject_Id);
SET @error_num = @@ERROR;
IF (@error_num <> 0)
BEGIN
ROLLBACK;
RETURN;
END
SET @error_num = @@ERROR;
IF (@error_num <> 0)
BEGIN
ROLLBACK;
RETURN;
END
ELSE
BEGIN
Commit;
END
END
Tôi sẽ đặt GIAO DỊCH COMMIT vào khối BEGIN TRY .... END TRY - không phải sau toàn bộ câu lệnh. Nó sẽ không dễ dàng hơn và chính xác hơn? –
tại sao không đặt 'BEGIN TRANSACTION' sau' BEGIN TRY'? –
Điều này đã được 6 năm trước .... không thể nhớ khá những gì tôi đã suy nghĩ;) Nhưng có, tôi sẽ đặt giao dịch bên trong BEGIN TRY. Tôi đã cập nhật câu trả lời. – AdaTheDev