您是否認爲有更好的方法來在t-sql中編寫事務?是否有更好的方法來提高使用此事務的應用程序的可維護性和性能?在t-sql中寫入事務並處理錯誤
-- 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
我會把COMMIT TRANSACTION放入BEGIN TRY .... END TRY塊 - 不是在整個語句之後。這不是更簡單,更準確嗎? – 2010-01-24 15:42:42
爲什麼不在'BEGIN TRY'之後放置'BEGIN TRANSACTION'呢? – 2016-06-16 15:23:36
這是6年前......記不起我在想什麼;)但是,我會把交易放在BEGIN TRY裏面。我已經更新了答案。 – AdaTheDev 2016-06-16 15:48:15