質問: データベースのトランザクション分離レベルですが、例えばSQL serverでデータベース単位にトランザクション分離レベルを設定した上で、クライアント側でセッション単位に指定した場合どちらの設定が有効になるのでしょうか?
回答: 「SQL serverでデータベース単位にトランザクション分離レベルを設定」がどのような操作を想定されているのか不明です。少なくともALTER DATABASE の SET オプションにトランザクションに関わる設定はありません。 トランザクション分離レベルは、同時に実行される複数のトランザクションが相互にどのように影響を及ぼしあうか、影響を与えないようにするかに関する規定であり、一般的には各々のクエリに対するロックで実現されます。 SQL Serverにおいても`SET TRANSACTION ISOLATION LEVEL`で現在のトランザクションに対するトランザクション分離レベルを設定できますが、それはトランザクションに含まれる各々のクエリに対するテーブルヒント(のロックに対する指定)のデフォルト値を変更する行為に対応します。例えば、 ``` SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ``` と指定するのは、全てのクエリに`NOLOCK`もしくは`READUNCOMMITTED`ヒントを付与することを意味します。しかし、個々のクエリ側に明示的に`UPDLOCK`など別のロックヒントを付与した場合、トランザクション分離レベルの設定とは異なる挙動をします。 > > クライアント側でセッション単位に指定した場合どちらの設定が有効になるのでしょうか? > > > というわけでそもそもどちらというわけがありませんし、最終的には各々のクエリがどのようなロックヒントで実行されるかで決まります。