2011-11-02 8 views
11

BEGIN TRANSACTIONを使用するかどうかに関わらず、ストアドプロシージャの有効範囲内で指定されたトランザクションレベルがSET TRANSACTION ISOLATION LEVEL ...の文章を持っている場合は、BEGINの直後ですか?つまり、単純なSELECTステートメントが定義によってアトミック/トランザクションされている場合、それらのデフォルトトランザクションレベルは与えられたものに設定されますか?SQL Server:ストアドプロシージャ全体のデフォルトの分離レベルを設定する方法は?

答えて

11

最初に、SQL Serverの既定の分離レベルは既定の分離レベルを変更しない限り、このステートメントは実際に何も行いません。

しかし、一般的に、はい、SETトランザクション分離レベルは

すべてのSQL文があることを意味暗黙のトランザクションがあることを覚えておいてください(実際には、接続時間)全体の手順の分離レベルを変更しますたとえば、更新が99%失敗した場合、自動的にロールバックされます。 BEGIN TRAN/COMMITが必要です。

質問に答えるには、個々のクエリが動作するWITH NOLOCKのようなクエリヒントを使用して動作をオーバーライドしないかぎり、SELECTステートメントは設定した分離レベルを継承します(設定しない場合はデフォルト)あなたと同じようにSET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

+3

[ここに示すように接続の間は変更されません](http://stackoverflow.com/questions/7507714/sql-server-2005-transaction-level-and-stored) -procedures/7507829#7507829) –

+0

@magicmike:ありがとう!私は答えとしてそれを受け入れていますが、あなたがMSのドキュメントに私を指摘することができればさらに良いでしょう。 – Schultz9999

+1

: 'TRANSACTION ISOLATION LEVEL'を設定する - http://msdn.microsoft.com/en-us/library/ms173763.aspx暗黙的なトランザクション: - http://msdn.microsoft.com/en-us/library /ms188317.aspx –

関連する問題