¿Crees que hay una forma mejor de escribir una transacción en t-sql? ¿Existe un mejor enfoque que mejore el mantenimiento y el rendimiento de la aplicación que utiliza esta transacción?escribiendo una transacción en t-sql y manejo de errores
-- 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
Pondría COMMIT TRANSACTION en el bloque BEGIN TRY .... END TRY, no después de toda la afirmación. ¿No sería eso más fácil y más preciso? –
¿por qué no poner 'BEGIN TRANSACTION' después del' BEGIN TRY' también? –
Esto fue hace 6 años ... no recuerdo bien lo que estaba pensando;) Pero sí, pondría la transacción dentro de BEGIN TRY. He actualizado la respuesta. – AdaTheDev