他の回答が言ったように、sp_reset_connection
接続プールが再利用されていることを示します。 1つの特定の結果に注意してください!
ジミーメイズのMSDNブログ 言った:
sp_reset_connectionは、トランザクション分離レベルを以前の接続の設定からサーバーのデフォルトにリセットしません。
更新 :SQL 2014以降、TDSバージョン7.3以降のクライアントドライバーの場合、トランザクション分離レベルはデフォルトにリセットされます。
参照:SQL Server:プールされた接続間での分離レベルのリーク
追加情報は次のとおりです。
sp_reset_connectionは何をしますか?
ODBC、OLE-DB、System.Data.SqlClientなどのデータアクセスAPIのレイヤーはすべて、接続プールからの接続を再利用するときに、(内部の)ストアドプロシージャp_reset_connectionを呼び出します。これは、接続が再利用される前に接続の状態をリセットするために行われますが、何がリセットされるかはどこにも文書化されていません。この記事では、接続のリセットされる部分を文書化しようとしています。
sp_reset_connectionは、接続の次の側面をリセットします:
すべてのエラー状態と数値(@@ errorなど)
並列クエリを実行する親ECの子スレッドであるすべてのEC(実行コンテキスト)を停止します
未処理の未処理のI/O操作を待機します
接続によってサーバー上に保持されているバッファーを解放します
接続で使用されているバッファリソースのロックを解除します
接続によって所有されている割り当てられたすべてのメモリを解放します
接続によって作成されたすべての作業または一時テーブルをクリアします
接続が所有するすべてのグローバルカーソルを強制終了します
開いているSQL-XMLハンドルをすべて閉じます
開いているSQL-XML関連の作業テーブルをすべて削除します
すべてのシステムテーブルを閉じます
すべてのユーザーテーブルを閉じます
すべての一時オブジェクトを削除します
オープントランザクションを中止します
参加時の分散トランザクションの欠陥
共有データベースロックを解放する現在のデータベースのユーザーの参照数を減らします
取得したロックを解放します
取得したハンドルを解放します
すべてのSETオプションをデフォルト値にリセットします
@@rowcount値をリセットします
@@identity値をリセットします
dbcc traceon()
を使用してセッションレベルのtraceoptionsをリセットしますCONTEXT_INFOを
NULL
にリセットします SQLServer2005以降の[元の記事の一部ではありません]sp_reset_connectionはリセットされません:
セキュリティコンテキスト。これが、接続プーリングが正確な接続文字列に基づいて接続と一致する理由です
SQL Server 2005より前のアプリケーションロールはまったく元に戻せなかったため、sp_setapproleを使用して入力されたアプリケーションロール。SQLServer2005以降、アプリケーションロールは元に戻すことができますが、セッションの一部ではない追加情報を使用する必要があります。接続を閉じる前に、
sp_setapprole
のときにキャプチャされる「cookie」値を使用して、sp_unsetapproleを介してアプリケーションの役割を手動で元に戻す必要があります。 実行されます。
注:一時的なウェブでリストが失われることを望まないため、ここにリストを含めています。