2017-09-18 8 views
1

SQLトランザクションプロシージャでreturn文を使用できますか?トランザクションをコミットする前にSQLプロシージャを返すことはできますか?

SQLの手順

ALTER PROCEDURE [dbo].[uspProcessStudentRecord] 
AS 
Begin Transaction 
insert into dbo.Student(name,address) values('ABC','INDIA'); 
return; 
Commit Transaction 

それはトランザクション内でreturnを書くのは良い習慣ですか?

+3

'commit'は決して起こりません。 –

+0

@ gordonLinoff私のクエリは正常に動作していて、コードもコミットしています。なぜ、私は混乱しているのですか? – piyush

+0

なぜあなたはこれをしたいですか? – Joe

答えて

2

トランザクション内にリターンを書くのがよいでしょうか?

あなたは、このSQL Serverエラーを取得すると、トランザクションがコミットされないままになります実際には番号:

後のトランザクション数EXECUTEは BEGINとCOMMIT文の不一致の数を示します。トランザクションは、ストアドプロシージャで開始された前のカウント= 0、現在の数= 1

は、ベストプラクティスは、戻る前にへCOMMITROLLBACKです。また、明示的なトランザクションを使用してprocs内にSET XACT_ABORT ONを指定して、タイムアウト後にトランザクションを誤ってオープンにしないようにすることをお勧めします。

1

ロールバックトランザクションは元に戻します。 最初にコミットしなかった場合、それを返すことは何も行いません。 しかし、try catchやその他のステートメントを使用しない限り、あなたが今声明でやっていることは何もしていません。

0

あなたが本当にトランザクションがロールバックされた場合でもコミットできるようにしたいん(と私は考えることができる唯一の現実的な理由は、ロギングの目的である)場合に開いてオプションのカップルがあります:

  1. イベント通知でService Brokerを使用するlink
  2. 分散トランザクションプロモーションなしで同じDBインスタンスを指すリンクサーバーを使用します。これは、完全に独立したトランザクションでコミットします。

これは本当に行う必要があるかどうか再考してください。

関連する問題