Glauben Sie, es gibt eine bessere Möglichkeit, eine Transaktion in T-SQL zu schreiben? Gibt es einen besseren Ansatz, der die Wartbarkeit und Leistung der Anwendung verbessert, die diese Transaktion verwendet?Schreiben einer Transaktion in T-SQL und Fehlerbehandlung
-- 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
Ich würde die COMMIT TRANSACTION in den BEGIN TRY .... END TRY Block setzen - nicht nach der ganzen Aussage. Wäre das nicht einfacher und genauer? –
warum nicht auch die 'BEGIN TRANSACTION' nach dem' BEGIN TRY' setzen? –
Das war vor 6 Jahren .... kann mich nicht mehr erinnern, was ich dachte;) Aber ja, ich würde die Transaktion in den BEGINNEN TRY setzen. Ich habe die Antwort aktualisiert. – AdaTheDev