2017-08-17 1 views
0

sqlのTransactionを使用してすべてのクエリ結果を強制的に成功させています。 すべてのクエリが正常に実行されるように設定するにはどうすればよいですか。クエリにエラーが発生した場合は、すべてのクエリを実行しないでください。 これは私がSQL Serverでトランザクションを使用しています方法です....私はsqlのトランザクションを使用してすべてのクエリ結果を強制的に成功させています。しかし、機能しません。

BEGIN TRANSACTION 
GO 
     INSERT [form].[control](Id,Name,Title,ElementType,IsRequired,Length,MinValue,MaxValue,Mask,DefaultValue,OptionType,DbType,AddOn,AddOnBefore,ShowHide,ShowHideCtrlType,DisabledCtrl,DisabledCtrlType,IsActive,IsHidden,ParentId,CreatedBy,CreatedOn,UpdatedBy,Updatedon,Class,Multiple) 
      VALUES('43',null,'Current Medical & Mental Health Diagnoses','2',null,null,null,null,null,null,null,'1',null,null,null,null,null,null,'1',null,null,'1',convert(datetime,'Jan 1 2016 12:00AM'),null,null,'15','0') 
     update form.Control 
     set class= NULL 
     where id = 43 

COMMIT TRANSACTION ; 
+1

「機能していません」とはどういう意味ですか? –

+2

あなたのスクリプトはわかりません。新しいレコードを挿入してから更新するのは何ですか?単に正しい値で挿入してください。 –

+0

@ kannan-kandasamy 1レコードが更新され、挿入は実行されません。 insert文でエラーが発生した場合は、レコードを更新しないでください。 –

答えて

2

基本的に、あなたが何がこのようなものです:

BEGIN TRANSACTION; 
BEGIN TRY 

-- Multiple sql statements goes here 

COMMIT TRANSACTION; 
END TRY 
BEGIN CATCH 
ROLLBACK TRANSACTION; 
END CATCH 

commit transactionは、t彼はtryブロックの最後の声明を出しました。このようにして、トランザクションは、tryブロック内の文でエラーが発生していない場合にのみコミットされ、エラーがあった場合にのみロールバックされます。

+0

ニース私は試し始める –

0

は、SQL ServerではXACT_ABORT

それはエラーがトランザクション内で発生したときに何が起こるかを決定するという設定があります。デフォルトではoffになっています。つまり、トランザクション内に複数のステートメントがあると、そのうちの1つが失敗する可能性がありますが、他は成功します。

ON へのトランザクションのすべてを設定すると、ここに戻っ

を巻いているのはあなたのように見える例とMicrosoftのドキュメントです! https://docs.microsoft.com/en-us/sql/t-sql/statements/set-xact-abort-transact-sql

関連する問題