3

SQLストアドプロシージャを呼び出すための新しいデータアクセスフレームワークを導入しました。レコードセットを返すストアドプロシージャを呼び出すと、そのストアドプロシージャが何らかの更新(挿入/更新/削除)も実行するという問題が発生しました。

コマンドオブジェクトをソースとして持つRecordsetオブジェクトのActiveConnectionプロパティを変更することはできません。

これに対する解決策は、ストアドプロシージャの先頭に「SETNOCOUNTON」を追加することです。これは問題なく機能し、もちろん、パフォーマンスの向上も宣伝されています。

開発者には、既存のストアドプロシージャを呼び出すコードを記述したい場合は、ストアドプロシージャ自体もリファクタリングしてを含める必要があることをお勧めしますSET NOCOUNT ON

しかし、これにより、すべてのストアドプロシージャを包括的に更新して、を含めることの潜在的な結果/リスクはどうなるのか、疑問に思いましたSET NOCOUNT ON。これはどのようなシナリオでSPの機能を壊しますか?(SET NOCOUNTがONの場合でも、@@ ROWCOUNT関数が更新される場合)

いつものように、助けてください。

4

1 に答える 1

5

主な危険は、既存のプロセスのいずれかが、の値を明示的にクエリせずに行数が返されることを探したり、想定したりする場合だと思います@@ROWCOUNT

コードのどこかに実行されるストアドプロシージャがあり、アプリケーションは戻り行の値が完了したことを認識するのを待つ可能性があります。その場合、アプリは無期限にハングします。

于 2011-03-01T14:33:35.440 に答える